Python 使用命名字段组合两个numpy-ndarray数组
如何正确地将两个具有命名字段且长度相同的numpy ndarray组合成一个ndarray?在下面的示例中,我想将Python 使用命名字段组合两个numpy-ndarray数组,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,如何正确地将两个具有命名字段且长度相同的numpy ndarray组合成一个ndarray?在下面的示例中,我想将xnd和ynd组合成一个numpy数组 我知道如何从连接的数据类型xnd和ynd创建一个新的数据数组,然后迭代地将xnd和ynd中的内容复制到新的数据数组中。但是有一个numpy命令可以帮我做这件事吗 将xnd和ynd结合起来的最快最简单的方法是理想的。也许是将ynd附加到xnd中而不是复制?此解决方案需要在大型阵列中快速工作 我已经看到了几个关于如何组合简单的n维numpy数组的示
xnd
和ynd
组合成一个numpy数组
我知道如何从连接的数据类型xnd
和ynd
创建一个新的数据数组,然后迭代地将xnd
和ynd
中的内容复制到新的数据数组中。但是有一个numpy命令可以帮我做这件事吗
将xnd
和ynd
结合起来的最快最简单的方法是理想的。也许是将ynd
附加到xnd
中而不是复制?此解决方案需要在大型阵列中快速工作
我已经看到了几个关于如何组合简单的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')]
将numpy导入为np
n=10
t=np.arange(n)
abc=np.数组((t,t+n,t+2*n)).t
y=(t*10).aType(np.uint32)
#创建x阵列
xdt=np.dtype([
('t',np.64),
(‘abc’,(np.32,3))
])
xnd=np.ndarray(shape=n,dtype=xdt)
xnd['t']=t
xnd['abc']=abc
#创建y形阵列
ydt=np.dtype([
('y',np.uint32),
])
ynd=np.ndarray(shape=n,dtype=ydt)
ynd['y']=y
打印xnd.dtype
#[('t','以下是recarray
函数的功能-按名称复制字段:
In [10]: zdt=[('t', '<f8'), ('abc', '<f4', (3,)), ('y', '<u4')]
In [11]: znd=np.zeros(xnd.shape, dtype=zdt)
In [12]: for name in xnd.dtype.names:
....: znd[name]=xnd[name]
....:
In [13]: for name in ynd.dtype.names:
znd[name]=ynd[name]
....:
In [14]: znd
Out[14]:
array([(0.0, [0.0, 10.0, 20.0], 0L), (1.0, [1.0, 11.0, 21.0], 10L),
(2.0, [2.0, 12.0, 22.0], 20L), (3.0, [3.0, 13.0, 23.0], 30L),
(4.0, [4.0, 14.0, 24.0], 40L), (5.0, [5.0, 15.0, 25.0], 50L),
(6.0, [6.0, 16.0, 26.0], 60L), (7.0, [7.0, 17.0, 27.0], 70L),
(8.0, [8.0, 18.0, 28.0], 80L), (9.0, [9.0, 19.0, 29.0], 90L)],
dtype=[('t', '<f8'), ('abc', '<f4', (3,)), ('y', '<u4')])
我预计这会更慢,至少当行数多于字段数时
由于在这种情况下字段没有重叠,因此只需将数据类型的dtye.descr
合并即可创建新的数据类型。descr
是一个列表;一个列表可以连接到另一个列表
In [26]: np.dtype(xnd.dtype.descr+ynd.dtype.descr)
Out[26]: dtype([('t', '<f8'), ('abc', '<f4', (3,)), ('y', '<u4')])
[26]中的:np.dtype(xnd.dtype.descr+ynd.dtype.descr)
Out[26]:dtype([('t','我的问题是重复的,已经在这里回答了:
In [26]: np.dtype(xnd.dtype.descr+ynd.dtype.descr)
Out[26]: dtype([('t', '<f8'), ('abc', '<f4', (3,)), ('y', '<u4')])