Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 30, 2015 23:17:25

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

memoryview и его методы

Можете кинуть ссылку или подсказать в каких книгах хорошо подробно рассказано на русском про memoryview и его методы. Гугл мне не помог.

Офлайн

#2 Дек. 31, 2015 02:29:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

memoryview и его методы

Офлайн

#3 Дек. 31, 2015 14:08:22

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

memoryview и его методы

py.user.next
python.org. memoryview
Я ж на русском попросил. Как раз читаю официальную документацию сейчас, но про memoryview что-то не дошло ничего, по этому, думаю, может поможет если на русском почитаю.

Отредактировано yaforever (Дек. 31, 2015 14:10:15)

Офлайн

#4 Дек. 31, 2015 15:09:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

memoryview и его методы

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])
>>>



Офлайн

#5 Дек. 31, 2015 21:55:51

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

memoryview и его методы


py.user.next
Ну, это интерфейс к данным объекта в памяти.
А что делает метод release() ? И что такое shape?

Офлайн

#6 Янв. 1, 2016 02:27:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

memoryview и его методы

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))
>>>



Отредактировано py.user.next (Янв. 1, 2016 02:28:05)

Офлайн

#7 Янв. 1, 2016 14:54:08

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

memoryview и его методы

py.user.next
Вот теперь более понятно, спасибо

Отредактировано yaforever (Янв. 1, 2016 14:54:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version