如何从结构化numpy数组中访问多个字段?
我遇到了一个问题,就是怎么同时访问多个字段(列)。
输入:
a = np.array([(1.0, 2,1),(3.0, 4,2),(9, 3,6)], dtype=[('x', float), ('y', float), ('z', float)])
a=np.reshape(a,(a.shape[0],-1))
a
输出:
array([[(1.0, 2.0, 1.0)],
[(3.0, 4.0, 2.0)],
[(9.0, 3.0, 6.0)]],
dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')])
如果我想访问第一列,可以这样做:
in: a[:]['x']
out: array([[ 1.],
[ 3.],
[ 9.]])
但是如果我想访问第一列和第三列,正确的写法是什么呢?
像这样:
in: a[:]['x':'z']
显然这样是不行的。
3 个回答
0
假设你有很多列的数据,而你不想一个个手动添加所有的项目。你可以这样做:
首先,把a
的列名转换成一个列表。这样一来,你就可以通过列表的索引或者直接通过项目来访问这些列。
col_to_ex=list(a.dtype.names)
col_to_ex=col_to_ex[0]+...
或者
col_to_ex=list(a.dtype.names).remove('y')
然后你可以这样做:
a[:][col_to_ex]
1
a[:][['x', 'z']]
Out[9]:
array([[(1.0, 1.0)],
[(3.0, 2.0)],
[(9.0, 6.0)]],
把列名作为一个列表传递
1
用一个字段名称的列表来作为数组的索引。这样得到的结果是一个形状相同的数组,但里面只包含你选定的字段(数组中包含多个字段的部分叫做记录)。
import numpy as np
a = np.array([(1.0, 2,1),(3.0, 4,2),(9, 3,6)], dtype=[('x', float), ('y', float), ('z', float)])
print(a)
print(a[['x', 'z']])
如果你想的话,还可以对得到的数组进行进一步的索引,只选择你需要的元素。