如何提取命名元组数组中某个字段的值

1 投票
2 回答
810 浏览
提问于 2025-04-18 13:27

我刚开始学习Python,现在正在从MATLAB转过来。我之前是这样使用 namedtuple 类的。

from collections import namedtuple
import numpy as np
MyStruct = namedtuple("MyStruct", "field1 field2 field3")
d = []
d.append(MyStruct(field1=np.array(3,'int'),field2=np.array(4,'int'),field3=np.array(5,'int')))
d
d.append(MyStruct(field1=np.array(4,'int'),field2=np.array(5,'int'),field3=np.array(6,'int')))

这里的 d 是一个包含两个 namedtuple 对象的列表。我想要的是一种简单的方法,能够从 d 中获取所有 field1 的值,而不需要一个一个地去遍历 d 的元素。就像在MATLAB中,我们可以在结构体数组外面加上方括号一样。

如果有人能给我一些建议,我会非常感激。

Srini

2 个回答

1

这就是列表推导式的用途:

field1vals = [x.field1 for x in d]
0

这里有一些选择:

In [31]: x = np.array([(3,4,5),(4,5,6)],dtype=[('field1','i'),('field2','i'), ('field3', 'i')])

In [32]: x['field2']
Out[32]: array([4, 5])

In [33]: x = np.array([(3, 4, 5), (4, 5, 6)])

In [34]: x[:, 1]
Out[34]: array([4, 5])

In [35]: x = np.array([MyStruct(field1=3, field2=4, field3=5), MyStruct(field1=4, field2=5, field3=6)])

In [36]: x[:, 1]
Out[36]: array([4, 5])

或者,如果你需要不同的列有不同的数据类型,在你执行 import pandas as pd 之后:

In [41]: x = pd.DataFrame([MyStruct(field1=3, field2=4, field3=5), MyStruct(field1=4, field2=5, field3=6)], columns=['field1', 'field2', 'field3'])

In [42]: x.field2
Out[42]: 
0    4
1    5
Name: field2, dtype: int64

撰写回答