Próbuję zawinąć głowę wokół numpy implementacji PEP3118. Jak dokładnie działa dostęp do bufora w trybie numpy.numpy.getbuffer i numpy.frombuffer
>>> p = numpy.getbuffer(numpy.arange(10))
>>> p
<read-write buffer for 0x1003e5b10, size -1, offset 0 at 0x1016ab4b0>
>>> numpy.frombuffer(p)
array([ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,
1.48219694e-323, 1.97626258e-323, 2.47032823e-323,
2.96439388e-323, 3.45845952e-323, 3.95252517e-323,
4.44659081e-323])
Otrzymuję nieoczekiwane zwroty. Spodziewałbym się tablicy z 10 elementami od 0 do 9. Mogę wejść do tablicy i czytać/pisać.
>>> j = numpy.frombuffer(p)
>>> j
array([ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,
1.48219694e-323, 1.97626258e-323, 2.47032823e-323,
2.96439388e-323, 3.45845952e-323, 3.95252517e-323,
4.44659081e-323])
>>> j += 1
>>> j
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
Wygląda na to, że bufor inicjalizuje wszystkie zera, do których mogę następnie pisać. Funkcją, której oczekuję, jest możliwość zbudowania tablicy (z arange lub asarray) bezpośrednio do bufora z getbuffer. Czy to nie jest możliwe?
Co za wspaniały dodatek do odpowiedzi Pierre'a.Dodatkowy szczegół jest bardzo doceniany. – Jzl5325