以你的小例子来说,我很难找到比列表和字典理解结合更快的东西In [105]: timeit [{'x':i, 'y':j, 'z':k} for i,j,k in zip(x,y,z)]
100000 loops, best of 3: 15.5 µs per loop
In [106]: timeit [{'key':{'x':i, 'y':j, 'z':k}} for i,j,k in zip(x,y,z)]
10000 loops, best of 3: 37.3 µs per loop
在分区之前使用数组连接来连接数组的替代方法速度较慢。在
^{pr2}$
======================
结构化数组使用recfunctions最简单:In [109]: from numpy.lib import recfunctions
In [112]: M=recfunctions.merge_arrays((x,y,z))
In [113]: M.dtype.names=['x','y','z']
In [114]: M
Out[114]:
array([(0, 10, 100), (1, 11, 101), (2, 12, 102), (3, 13, 103),
(4, 14, 104), (5, 15, 105), (6, 16, 106), (7, 17, 107),
(8, 18, 108), (9, 19, 109)],
dtype=[('x', '
In [115]: M['x']
Out[115]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
时间要慢得多,但是如果您想一次访问所有的x值,这比从所有字典中获取它们要好得多。在np.rec.fromarrays((x,y,z),names=['x','y','z'])
生成具有给定名称的重新排列。速度差不多。在
我还可以构造一个具有正确数据类型和形状的空数组,并将数组复制到其中。这可能和这个一样快,但是描述起来更复杂。在
我建议优化数据结构以使用/访问,而不是构建速度。一般来说,一次构造,多次使用。在
==========In [125]: dt=np.dtype([('x',x.dtype),('y',y.dtype),('z',z.dtype)])
In [126]: xyz=np.zeros(x.shape,dtype=dt)
In [127]: xyz['x']=x; xyz['y']=y; xyz['z']=z
# or for n,d in zip(xyz.dtype.names, (x,y,z)): xyz[n] = d
In [128]: xyz
Out[128]:
array([(0, 10, 100), (1, 11, 101), (2, 12, 102), (3, 13, 103),
(4, 14, 104), (5, 15, 105), (6, 16, 106), (7, 17, 107),
(8, 18, 108), (9, 19, 109)],
dtype=[('x', '