Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Widokipamięci
Wbudowanaklasa
memorview
(widokpamięci)jesttypemsekwencjiobejmującymwspół-
dzielonąpamięć,którapozwalaobsługiwaćwycinkitablicbezkopiowaniabajtów.Została
zainspirowanabibliotekąNumPy(którąomówimypokrótcewpodrozdzialenNumPy”na
stronie67).TravisOliphant,wiodącyautorNumPy,takodpowiedziałnapytanienKiedy
należyużywaćwidokówpamięci?”(https://fpy.li/2-17):
WidokpamięcitowistocieuogólnionastrukturatablicyNumPywsamymPythonie
(bezfunkcjimatematycznych).Pozwalanawspółdzieleniepamięcimiędzystruk-
turamidanych(takimijakobrazyPIL,bazydanychSQLlite,tabliceNumPyitp.)
bezwcześniejszegokopiowania.Jesttobardzoważnedladużychzbiorówdanych.
Korzystającznotacjipodobnejdomodułu
array
,metoda
memoryview.cast
pozwalazmie
-
niaćsposóbodczytywanialubzapisywaniawielubajtówjakojednostekbezprzenoszenia
bitów(zupełniejakoperator
cast
wjęzykuC).
memoryview.cast
zwracajeszczejeden
obiekt
memoryview
,zawszewspółdzielącesamąpamięć.
Przykład2-20pokazujeprzykładtworzeniaalternatywnegowidokutejsamejtablicy
zawierającej6bajtów,abymócoperowaćnamacierzach2×3albo3×2.
Przykład2-20Obsługiwanie6bajtówpamięcijakowidoków1×6,2×3oraz3×2
>>>fromarrayimportarray
>>>octets:array('B',range(6))
1
>>>m1:memoryview(octets)
2
>>>m1.tolist()
[0,1,2,3,4,5]
>>>m2:m1.cast('B',[2,3])
3
>>>m2.tolist()
[[0,1,2],[3,4,5]]
>>>m3:m1.cast('B',[3,2])
4
>>>m3.tolist()
[[0,1],[2,3],[4,5]]
>>>m2[1,1]:22
>>>m3[1,1]:33
>>>octets
7
5
6
array('B',[0,1,2,33,22,5])
1Budujetablicę6bajtów(kodtypu
'B'
).
2Budujewidokpamięci
memoryview
ztejtablicyieksportujegojakolistę.
3
Budujenowy
memoryview
zpoprzedniego,alezdwomarzędamiitrzemakolumnami.
4Jeszczejeden
memoryview
,terazztrzemarzędamiidwiemakolumnami.
5Nadpisaniebajtuw
m2
wrzędzie1,kolumnie1wartością22.
Kiedylistaniejestrozwiązaniem
|
65