Найти - Пользователи
Полная версия: memoryview и его методы
Начало » Python для новичков » memoryview и его методы
1
yaforever
Можете кинуть ссылку или подсказать в каких книгах хорошо подробно рассказано на русском про memoryview и его методы. Гугл мне не помог.
py.user.next
python.org. memoryview
yaforever
py.user.next
python.org. memoryview
Я ж на русском попросил. Как раз читаю официальную документацию сейчас, но про memoryview что-то не дошло ничего, по этому, думаю, может поможет если на русском почитаю.
py.user.next
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])
>>>
yaforever

py.user.next
Ну, это интерфейс к данным объекта в памяти.
А что делает метод release() ? И что такое shape?
py.user.next
yaforever
А что делает метод release() ?
memoryview() прицепляет к объекту объект для просмотра (и изменения) памяти, а 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')
>>>

yaforever
И что такое shape?
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))
>>>
yaforever
py.user.next
Вот теперь более понятно, спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB