我想从两个不同长度的数组 a 和 b 创建一个成对数组的矩阵:
a = np.array([1,2,3])
b = np.array([4,5,6,7])
因此,c 矩阵应如下所示:
[[1,4], [1,5], [1,6], ..., [3,7]]
c = [[i,j] for i in (a) for j in (b)]
您也可以product
从itertools
库中使用。将返回和product(a, b)
之间的迭代器产品。使用使其成为一个数组。a
b
vstack
from itertools import product
np.vstack(product(a, b))
输出
array([[1, 4], [1, 5], [1, 6], ...])
您可以使用np.meshgrid()
.
a = np.array((1, 2, 3))
b = np.array((4, 5, 6, 7))
out = np.stack([each.ravel(order='F') for each in np.meshgrid(a, b)])
out
现在看起来像这样:
array([[1, 4],
[1, 5],
[1, 6],
[1, 7],
[2, 4],
[2, 5],
[2, 6],
[2, 7],
[3, 4],
[3, 5],
[3, 6],
[3, 7]])
您可以使用两个数组创建一个 2D numpy 数组,然后将组合数组的轴与 np.swapaxes 交换以获得您想要的形状。
X = np.array([a, b])
swapped_array = X.swapaxes(1,0)
# X.swapaxes(0,1) returns the same result