如何从结构化numpy数组中访问多个字段?

1 投票
3 回答
1574 浏览
提问于 2025-04-18 10:08

我遇到了一个问题,就是怎么同时访问多个字段(列)。

输入:

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']])

如果你想的话,还可以对得到的数组进行进一步的索引,只选择你需要的元素。

撰写回答