5

1つ以上のレコードをフラットなバイナリファイルにロード/保存することを実装するndarrayサブクラスがあります。レコードがロードされた後、通常のNumPyの方法でレコードにアクセスできます。

私の質問は、結果(または実際には任意のNumPy配列)をスライスするとどうなるかについてです。これは通常、「ビュー」を生成します。親配列と同じバッファーを参照する配列。

このビューを取得したら、配列A内のビューVの位置を決定する方法はありますか?より正確には、Vが始まるバイトオフセット(Aのデータバッファの先頭から)を知りたいです。これにより、スライスをディスクの正しいオフセットに書き戻すことができます。

状況を示すサンプルコードを次に示します

# Imagine a as consisting of 4 4-byte records...
a = np.arange(16, dtype='B').reshape(4,4)

# I select the first record
v = a[0]

print (v)

# [0 1 2 3]

# I can determine that v is a subarray:

is_subarray = v.base != None

# I can determine which dimension the slice spans..

whichdim = v.base.strides.index (v.strides[-1])

# But not its position along that dimension.
4

1 に答える 1

6

情報は(おそらくどこかで)公開されてarray.__array_interface__いますが、おそらく最初はmemmapを使用する必要があり、これをいじくり回してはいけないと思います。np.may_share_memoryたとえば、関数(または実際には)のnumpyコードを確認してくださいnp.byte_bounds

于 2012-09-14T11:53:52.353 に答える