Форум сайта python.su
0
Можете кинуть ссылку или подсказать в каких книгах хорошо подробно рассказано на русском про memoryview и его методы. Гугл мне не помог.
Офлайн
857
Офлайн
0
py.user.nextЯ ж на русском попросил. Как раз читаю официальную документацию сейчас, но про memoryview что-то не дошло ничего, по этому, думаю, может поможет если на русском почитаю.
python.org. memoryview
Отредактировано yaforever (Дек. 31, 2015 14:10:15)
Офлайн
857
yaforeverНу, это интерфейс к данным объекта в памяти.
но про memoryview что-то не дошло ничего
>>> import array >>> >>> a = array.array('l', [1, 2, 3]) >>> a array('l', [1, 2, 3]) >>> m = memoryview(a) >>> m <memory at 0xb7529714> >>> list(m) [1, 2, 3] >>> m[1] = 100 >>> a array('l', [1, 100, 3]) >>>
Офлайн
0
py.user.nextА что делает метод release() ? И что такое shape?
Ну, это интерфейс к данным объекта в памяти.
Офлайн
857
yaforevermemoryview() прицепляет к объекту объект для просмотра (и изменения) памяти, а release() - отцепляет.
А что делает метод release() ?
>>> a = bytearray(b'abcd') >>> m = memoryview(a) >>> m.tolist() [97, 98, 99, 100] >>> >>> a.append(101) Traceback (most recent call last): File "<stdin>", line 1, in <module> BufferError: Existing exports of data: object cannot be re-sized >>> >>> m.release() >>> a.append(101) >>> a bytearray(b'abcde') >>>
yaforevershape - это размерность массива, то есть один и тот же массив элементов можно представить как одномерный, как двумерный, как трёхмерный и так далее.
И что такое shape?
>>> import array >>> >>> a = array.array('l', [1, 2, 3, 4]) >>> m = memoryview(a) >>> m.tolist() [1, 2, 3, 4] >>> >>> m.format, m.nbytes, m.shape ('l', 16, (4,)) >>> >>> b = memoryview(m.tobytes()) >>> >>> c = b.cast('l', shape=[4, 1]) >>> c.tolist() [[1], [2], [3], [4]] >>> >>> c.format, c.nbytes, c.shape ('l', 16, (4, 1)) >>> >>> c = b.cast('l', shape=[2, 2]) >>> c.tolist() [[1, 2], [3, 4]] >>> >>> c.format, c.nbytes, c.shape ('l', 16, (2, 2)) >>> >>> c = b.cast('l', shape=[1, 4]) >>> c.tolist() [[1, 2, 3, 4]] >>> >>> c.format, c.nbytes, c.shape ('l', 16, (1, 4)) >>>
>>> a = array.array('l', [1, 2, 3, 4, 5, 6, 7, 8]) >>> m = memoryview(a) >>> m.tolist() [1, 2, 3, 4, 5, 6, 7, 8] >>> >>> c = memoryview(m.tobytes()).cast('l', shape=[2, 2, 2]) >>> c.tolist() [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] >>> >>> c.format, c.nbytes, c.shape ('l', 32, (2, 2, 2)) >>>
Отредактировано py.user.next (Янв. 1, 2016 02:28:05)
Офлайн
0
py.user.nextВот теперь более понятно, спасибо
Отредактировано yaforever (Янв. 1, 2016 14:54:20)
Офлайн