私はPEP3118の厄介な実装に頭を悩ませようとしています。バッファアクセスはnumpyでどの程度正確に機能しますか。
>>> 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])
だから私は予期しないリターンを得ています。0から9までの10個の要素を持つ配列が表示されると思います。ただし、配列にアクセスして読み取り/書き込みを行うことはできます。
>>> 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.])
したがって、バッファはすべてゼロに初期化されているように見えます。これを書き込むことができます。私が期待している機能は、getbufferを使用してバッファーに直接配列(arangeまたはasarrayを使用)を構築できることです。それは不可能ですか?