如何从结构化的numpy.array访问多个字段?

问题描述 投票:1回答:3

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

输入:

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

显然不起作用

python numpy field
3个回答
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']])

您可以对结果数组应用更高级别的索引,以选择仅需要的元素。    

1
投票
a[:][['x', 'z']] Out[9]: array([[(1.0, 1.0)], [(3.0, 2.0)], [(9.0, 6.0)]],
将列名作为列表传递    

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]

© www.soinside.com 2019 - 2024. All rights reserved.