例如,通过使用字段名称列表进行索引,我可以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)]
如果我只选择一列,它是一个视图:
c = x['y']
c[0] = 99.
print c
#[ 99. 4. 3. ]
print a['y']
#[ 99. 4. 3. ]
有什么方法可以一次获得多个列的视图行为?
我有两种解决方法,一种是循环遍历列,另一种是创建一个分层的dtype
,以便一列实际上返回一个结构化数组,其中包含我想要的两个(或更多)字段。不幸的是,zip
还返回一个副本,所以我不能这样做:
x = a['x']; y = a['y']
z = zip(x,y)
z[0] = (9.,9.)