我有两个数组A = [a1, ..., an]
和B = [b1, ..., bn]
. 我想得到新的矩阵 C 等于
[[a1, b1],
[a2, b2],
...
[an, bn]]
我该怎么做numpy.concatenate
?
我有两个数组A = [a1, ..., an]
和B = [b1, ..., bn]
. 我想得到新的矩阵 C 等于
[[a1, b1],
[a2, b2],
...
[an, bn]]
我该怎么做numpy.concatenate
?
这个非常简单但最快的解决方案怎么样?
In [73]: a = np.array([0, 1, 2, 3, 4, 5])
In [74]: b = np.array([1, 2, 3, 4, 5, 6])
In [75]: ab = np.array([a, b])
In [76]: c = ab.T
In [77]: c
Out[77]:
array([[0, 1],
[1, 2],
[2, 3],
[3, 4],
[4, 5],
[5, 6]])
但是,正如Divakar 指出的那样,使用np.column_stack
直接给出的答案如下:
In [85]: np.column_stack([a, b])
Out[85]:
array([[0, 1],
[1, 2],
[2, 3],
[3, 4],
[4, 5],
[5, 6]])
效率(按降序排列)
有趣的是,我的简单解决方案结果是最快的。(比 快一点,比np.concatenate
快两倍,比 快np.column_stack
三倍np.vstack
)
In [86]: %timeit np.array([a, b]).T
100000 loops, best of 3: 4.44 µs per loop
In [87]: %timeit np.concatenate((a[:,None], b[:,None]), axis=1)
100000 loops, best of 3: 5.6 µs per loop
In [88]: %timeit np.column_stack([a, b])
100000 loops, best of 3: 9.5 µs per loop
In [89]: %timeit np.vstack((a, b)).T
100000 loops, best of 3: 14.7 µs per loop
您也可以np.vstack
在之后使用然后转置矩阵
import numpy as np
A = [1, 2, 3]
B = [4, 5, 6]
C = np.vstack((A, B)).T
In [26]: A=np.arange(5)
In [27]: B=np.arange(10,15)
In [28]: np.concatenate((A[:,None], B[:,None]), axis=1)
Out[28]:
array([[ 0, 10],
[ 1, 11],
[ 2, 12],
[ 3, 13],
[ 4, 14]])
In [29]: _.tolist()
Out[29]: [[0, 10], [1, 11], [2, 12], [3, 13], [4, 14]]
np.column_stack
, np.vstack
,np.stack
都做同样的事情,只是以不同的方式扩展数组的维度。
np.stack((A,B),-1)
像我一样使用newaxis
索引扩展数组。
np.column_stack((A,B))
用途:
arr = array(arr, copy=False, subok=True, ndmin=2).T
np.vstack((A,B)).T
用途:
concatenate([atleast_2d(_m) for _m in tup], 0)
出于好奇,请注意这个vstack
等价物:
In [38]: np.concatenate((A[None],B[None]))
Out[38]:
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])