Estoy tratando de entender la implementación numpy de PEP3118. ¿Cómo funciona exactamente el acceso de buffer en numpy?numpy.getbuffer y 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])
Así que estoy obteniendo retornos inesperados. Esperaría ver una matriz con 10 elementos de 0-9. Sin embargo, puedo entrar en la matriz y leer/escribir.
>>> 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.])
Parece que el búfer se está inicializando a todos los ceros, y luego puedo escribir en él. La funcionalidad que estoy esperando es poder construir la matriz (con arange o asarray) directamente en el buffer con getbuffer. ¿No es eso posible?
¡Qué admirable apéndice a la respuesta de Pierre!El detalle adicional es bastante apreciado. – Jzl5325