append_fields
で終わる、および他のほとんどのrecarray
新しいdtype
とempty
の配列を作成し、フィールドをその結果にオリジナル。
私は構造化された配列を示します
オリジナルdtypeは、配列:
In [102]: dt=np.dtype([('afield','f'),('pos','f',(3,))])
In [103]: dt
Out[103]: dtype([('afield', '<f4'), ('pos', '<f4', (3,))])
In [104]: arr = np.ones((3,),dtype=dt)
In [105]: arr
Out[105]:
array([(1.0, [1.0, 1.0, 1.0]), (1.0, [1.0, 1.0, 1.0]),
(1.0, [1.0, 1.0, 1.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,))])
修正DTYPE:
In [106]: dt1=np.dtype([('afield','f'),('pos','f',(3,)),('vel','f',(2,))])
In [107]: arr1 = np.empty((3,),dtype=dt1)
In [108]: arr1
Out[108]:
array([(0.0, [0.0, 0.0, 0.0], [0.0, 0.0]),
(0.0, [0.0, 0.0, 0.0], [0.0, 0.0]),
(0.0, [0.0, 0.0, 0.0], [0.0, 0.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<f4', (2,))])
In [109]: for name in dt.names:
.....: arr1[name] = arr[name]
In [110]: arr1
Out[110]:
array([(1.0, [1.0, 1.0, 1.0], [0.0, 0.0]),
(1.0, [1.0, 1.0, 1.0], [0.0, 0.0]),
(1.0, [1.0, 1.0, 1.0], [0.0, 0.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<f4', (2,))])
recarray
が同じものであるが、フィールドにアクセスする能力を持ちます属性として(arr.pos
)。私はrecursive_fill
ステップでエラーを得ていた(2)フィールドに
In [118]: rf.append_fields(arr, 'vel', np.arange(3),usemask=False)
Out[118]:
array([(1.0, [1.0, 1.0, 1.0], 0), (1.0, [1.0, 1.0, 1.0], 1),
(1.0, [1.0, 1.0, 1.0], 2)],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<i4')])
:
単純な整数フィールドを追加します。
In [206]: arr = np.ones((3,),dtype=dt)
In [207]: arr1 = np.zeros((3,),dtype=dt1)
In [208]: rf.recursive_fill_fields(arr,arr1)
Out[208]:
array([(1.0, [1.0, 1.0, 1.0], [0.0, 0.0]),
(1.0, [1.0, 1.0, 1.0], [0.0, 0.0]),
(1.0, [1.0, 1.0, 1.0], [0.0, 0.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<f4', (2,))])
In [210]: x = np.ones((3,),dtype=[('vel','f',(2,))])
In [211]: x['vel'] *= 2
In [212]: rf.recursive_fill_fields(x,arr1)
Out[212]:
array([(1.0, [1.0, 1.0, 1.0], [2.0, 2.0]),
(1.0, [1.0, 1.0, 1.0], [2.0, 2.0]),
(1.0, [1.0, 1.0, 1.0], [2.0, 2.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<f4', (2,))])
今append_fields
でそのx
してみてください:私は私のdt1
配列埋めるためにそれを使用することができ、適切な入力で
In [213]: rf.append_fields(arr, 'vel', x, usemask=False)
Out[213]:
array([(1.0, [1.0, 1.0, 1.0], ([2.0, 2.0],)),
(1.0, [1.0, 1.0, 1.0], ([2.0, 2.0],)),
(1.0, [1.0, 1.0, 1.0], ([2.0, 2.0],))],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', [('vel', '<f4', (2,))])])
おっとを - 私は、ネストのフィールドを取得しています。元の例に戻ります。目標を作成し、名前で記入してください。
merge_arrays
は良くありません - フラット化
In [247]: rf.merge_arrays((arr,x),flatten=True)
Out[247]:
array([(1.0, [1.0, 1.0, 1.0], [2.0, 2.0]),
(1.0, [1.0, 1.0, 1.0], [2.0, 2.0]),
(1.0, [1.0, 1.0, 1.0], [2.0, 2.0])],
dtype=[('afield', '<f4'), ('pos', '<f4', (3,)), ('vel', '<f4', (2,))])
を作成し、多くの場合、記入
In [248]: dx = [('f0','f',(2,))]
In [250]: y=np.zeros((3,), dtype=dx)
In [251]: y['f0'] = np.arange(6.).reshape(3,2)
その新しいフィールドに適切な配列を作成するもう一つの方法は、これらの複雑で構造化させる最良の方法であると思われますアレイ。
ここでは敗者だと思うし、 'append_fields'は目的に合っていません。 numpyに対するパッチはおそらく順序通りです – Eric
@Ericがそれを指摘してくれてありがとう。いつかすぐに、より多くの機能が実装されることを願っています。それまでは、私は自分のやり方で料理をするつもりです –