给定以下数组:
name = np.array(['a', 'b', 'c'])
val = np.array([0.4, 0.5, 0.6])
alt = np.array([1.1, 2.1, 3.1])
b = np.array([17.2])
如何将它们组合成一个如下所示的rearray(或结构化数组,同样的东西):[('a', 'b', 'c'), (0.4, 0.5, 0.6), (1.1, 2.1, 3.1), (17.2)]
。其中print(arr["name"])
返回('a', 'b', 'c')
。
实际数据有十几个数组,总有一个数组(b
)大小只有1;其他的都有相同的大小,但是大小会有所不同。所以,我正在寻找一个解决方案,可以扩展到这些条件。谢谢。
2条答案
按热度按时间hzbexzde1#
定义数据类型:
制作所需形状和dtype的零数组:
将数组复制到其各自的字段:
结果是:
这看起来和你想要的不一样,但是它是一个有效的结构化数组,你的不是。通过字段名访问可以达到你的目的:
b
值已被复制,不能制作"不规则"结构数组:另一个答案是创建一个
dict
,它给出了相同的"键"结果,但是是一个不同的结构,但它可能是您真正想要的。有一些辅助函数可以从一组数组中创建一个rearray,但是它们的作用是一样的,而且它们(可能)不会直接使用单个元素
b
。你可以用下面的语句来创建元组列表:
虽然
b
填充None/nan可能不是您想要的。你可以把数组组合成一个对象dtype数组,但是元素不能通过名称访问。这需要一个
dict
:disbfnqx2#
下面的解决方案生成的输出与您所说的所需内容非常匹配(但它不是NumPy记录数组):
这将打印
['a' 'b' 'c']
。注意,这里的arr
是一个简单的字典。使用NumPy的
numpy.recarray
的另一个答案如下:这里,
arr
的计算结果如下: