たとえば、フィールド名のリストを使用してインデックスを作成することにより、構造化配列に複数の列(fields
)を一度に表示できます。numpy
import numpy as np
a = np.array([(1.5, 2.5, (1.0,2.0)), (3.,4.,(4.,5.)), (1.,3.,(2.,6.))],
dtype=[('x',float), ('y',float), ('value',float,(2,2))])
print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]
print a[['x','y']].dtype
#[('x', '<f4') ('y', '<f4')])
しかし、問題は、それがビューではなくコピーのように見えることです。
b = a[['x','y']]
b[0] = (9.,9.)
print b
#[(9.0, 9.0) (3.0, 4.0) (1.0, 3.0)]
print a[['x','y']]
#[(1.5, 2.5) (3.0, 4.0) (1.0, 3.0)]
1つの列のみを選択すると、それはビューになります。
c = x['y']
c[0] = 99.
print c
#[ 99. 4. 3. ]
print a['y']
#[ 99. 4. 3. ]
一度に複数の列のビュー動作を取得する方法はありますか?
2つの回避策があります。1つは列をループするだけで、もう1つは階層を作成することdtype
です。これにより、1つの列が実際に必要な2つ(またはそれ以上)のフィールドを持つ構造化配列を返します。残念ながら、zip
コピーも返されるので、私はできません:
x = a['x']; y = a['y']
z = zip(x,y)
z[0] = (9.,9.)