如何从numpy.array访问多个字段?

时间:2014-06-17 19:26:05

标签: python numpy field

我遇到了访问多个字段(列)的难度

输入:

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

但是如果我想访问(例如)第一列第3列,那么正确的语法是什么? 像

这样的东西

in: a[:]['x':'z']

显然不起作用

3 个答案:

答案 0 :(得分:1)

a[:][['x', 'z']]

Out[9]: 
array([[(1.0, 1.0)],
   [(3.0, 2.0)],
   [(9.0, 6.0)]], 

将列名称作为列表传递

答案 1 :(得分: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']])

如果您愿意,可以对结果数组应用更多级别的索引以仅选择所需的元素。

答案 2 :(得分: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]