構造化numpy配列にフィールドを追加する最もクリーンな方法は何ですか?破壊的に行うことができますか、または新しい配列を作成して既存のフィールドにコピーする必要がありますか?このようなコピーを効率的に行うために、各フィールドの内容は連続してメモリに格納されていますか?構造化numpy配列へのフィールドの追加
20
A
答えて
19
numpy 1.3を使用している場合は、numpy.lib.recfunctions.append_fields()もあります。
多くのインストールでは、これにアクセスするにはimport numpy.lib.recfunctions
が必要です。 import numpy
は誰にも表示されないようにしますnumpy.lib.recfunctions
6
import numpy
def add_field(a, descr):
"""Return a new array that is like "a", but has additional fields.
Arguments:
a -- a structured numpy array
descr -- a numpy type description of the new fields
The contents of "a" are copied over to the appropriate fields in
the new array, whereas the new fields are uninitialized. The
arguments are not modified.
>>> sa = numpy.array([(1, 'Foo'), (2, 'Bar')], \
dtype=[('id', int), ('name', 'S3')])
>>> sa.dtype.descr == numpy.dtype([('id', int), ('name', 'S3')])
True
>>> sb = add_field(sa, [('score', float)])
>>> sb.dtype.descr == numpy.dtype([('id', int), ('name', 'S3'), \
('score', float)])
True
>>> numpy.all(sa['id'] == sb['id'])
True
>>> numpy.all(sa['name'] == sb['name'])
True
"""
if a.dtype.fields is None:
raise ValueError, "`A' must be a structured numpy array"
b = numpy.empty(a.shape, dtype=a.dtype.descr + descr)
for name in a.dtype.names:
b[name] = a[name]
return b
関連する問題
- 1. 構造化NumPy配列を高速化
- 2. numpyの構造化された配列
- 3. 配列から構造体配列への要素の追加
- 4. 構造体内の構造体の配列に追加
- 5. NumPy構造化配列の真に再帰的な `tolist()`
- 6. numpy再配列に2d配列(フィールド)を追加
- 7. は、私は構造体の2D numpyの配列を持つ2次元構造numpyの配列
- 8. Datagrid +構造体フィールドへの列のマップ
- 9. C++からC#への配列フィールドを含む構造体の整列配列
- 10. フィールド名なしのMatlab構造体配列へのアクセス
- 11. numpyの構造化配列を複数の列にマスクする方法は?
- 12. numpy構造化配列のすべての列を取得します。
- 13. 構造内の配列フィールドを初期化する方法は?
- 14. matplotlibで開いたnumpy配列へのパッチの追加
- 15. 配列へのアクセス方法配列の内部構造C++の構造体?
- 16. 構造体へのポインタの配列を初期化
- 17. Goの構造体の配列に構造体を追加する方法
- 18. ベクトル化 - ループのないnumpy配列の追加?
- 19. 構造体の配列内の構造体へのポインタ
- 20. 構造体の配列へのポインタ
- 21. Compute Shaderへの構造体の配列
- 22. 構造体へのポインタのC配列
- 23. NumPy配列にNumPy配列を追加する方法
- 24. 構造化numpy配列のnumpy.allcloseに相当するものは何ですか?
- 25. numpyの構造化配列からPythonの 'native'値を抽出します。
- 26. 構造体配列要素へのアクセス
- 27. ブール型のnumpy配列を追加
- 28. 構造体と配列の初期化
- 29. 構造体配列のポインタ初期化
- 30. 構造化2D Numpy配列:列名と行名を設定する
これはメモリの重複を避けるために修正できますか? ([この質問](http://stackoverflow.com/q/39965994/974555)を参照してください) – gerrit