如何将具有命名字段且长度相同的两个numpy ndarray正确地组合成一个ndarray?在下面的示例中,我希望将xnd
和{
我知道如何从xnd
和ynd
的连接数据类型创建一个新的ndarray,然后迭代地将xnd
和{
组合xnd
和{ynd
后面加上xnd
而不是复制?此解决方案需要快速处理大型ndarray。在
我看到了几个关于如何组合简单n维numpy数组的例子,但是他们没有帮助我解决这个问题。在我的例子的底部有znd = np.join((xnd, ynd))
的那一行就是我被卡住的地方。在
谢谢!在
import numpy as np
n = 10
t = np.arange(n)
abc = np.array((t,t+n,t+2*n)).T
y = (t*10).astype(np.uint32)
# Create x ndarray
xdt = np.dtype([
('t', np.float64),
('abc', (np.float32, 3) )
])
xnd = np.ndarray( shape=n, dtype=xdt)
xnd['t'] = t
xnd['abc'] = abc
# Create y ndarray
ydt = np.dtype([
('y', np.uint32),
])
ynd = np.ndarray( shape=n, dtype=ydt)
ynd['y'] = y
print xnd.dtype
# [('t', '<f8'), ('abc', '<f4', (3,))]
print ynd.dtype
# [('y', '<u4')]
# Combine x and y
# This line not correct. What is the proper way to do this?
znd = np.join((xnd, ynd))
print znd.dtype
# [('t', '<f8'), ('abc', '<f4', (3,)), ('y', '<u4')]
以下是
recarray
函数的作用-按名称复制字段:由于通常记录的数量远远大于字段的数量,所以这种迭代并不昂贵。在
可能有一个函数可以从单个函数中创建联合
zdt
,但我现在不打算深入研究。在有一个函数可以递归地复制字段。如果
dtype
是具有复合数据类型的嵌套字段,则需要这样做。在您还可以从元组列表创建一个新数组—每个记录一个元组。在这里,我使用
^{pr2}$zip()
对这两个数组进行迭代,并用元组连接来连接它们的记录。在我希望这会慢一些,至少当行数多于字段数时。在
由于在本例中字段中没有重叠,所以只需合并这些数据类型的
dtye.descr
,就可以生成新的数据类型。descr
是一个列表;一个列表可以连接到另一个列表。在相关问题 更多 >
编程相关推荐