0

numpy の構造化配列の使用方法を学ぼうとしています。具体的には、一度に複数のフィールドに情報を追加しようとしていました。私は試した:

import numpy as np

numrec = np.zeros(8, dtype=[('col0', 'int16'), ('col1', 'int16'),
                            ('col2', 'int16'), ('col3', 'int16')])

numrec[['col1','col2']][0:2] = [(3,5), (1,8)]
print numrec

上記は機能しません。指定された列に値は追加されません。驚くべきことは、実行してもエラーが発生しないことです。誰かが何が起こっているのか説明してもらえますか?

ありがとう。

4

1 に答える 1

9

一時的に値を設定しています。

numrec[["col1", "col2"]]

配列のコピーを返します。これは、OWNDATAフラグで確認できます。

>>> numrec[["col1", "col2"]].flags["OWNDATA"]
True

numpy配列にリストでインデックスを付けると、numpyはデータのコピーを返します。一般に、リストは基になるデータの通常の順序付けられたビューに解決されない可能性があるため、コピーである必要があります。(これは、構造化配列だけでなく、すべてのnumpy配列に当てはまります。)

比較

>>> numrec[["col1"]].flags["OWNDATA"]
True
>>> numrec["col1"].flags["OWNDATA"]
False

また、numpy配列がビューの場合、基本メンバーは基になる配列を保持します。

>>> id(numrec["col1"].base) == id(numrec)
True
于 2011-03-04T21:25:15.370 に答える