我不确定之前是否曾经问过这个问题,但我找不到解决这个看似简单问题的方法。我有两个这样的数组:
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[1,2,3],[7,8,9]])
我想创建一个合并矩阵,如:
merged = [[(1,1),(2,2),(3,3)],[(4,7),(5,8),(6,9)]]
实现这一目标的最快方法是什么?我正在使用python 2.
答案 0 :(得分:0)
stack
是一种新的,方便的创建这样的数组的方法。它与np.array
类似,但我们可以指定新轴:
In [117]: x = np.array([[1,2,3],[4,5,6]])
...: y = np.array([[1,2,3],[7,8,9]])
...:
In [118]: x.shape
Out[118]: (2, 3)
In [119]: np.stack((x,y),axis=2)
Out[119]:
array([[[1, 1],
[2, 2],
[3, 3]],
[[4, 7],
[5, 8],
[6, 9]]])
如果没有stack
,您可以在新的第一个轴上组合数组,然后更改轴的顺序:
In [120]: np.array((x,y))
Out[120]:
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[7, 8, 9]]])
In [121]: np.array((x,y)).transpose(1,2,0)
Out[121]:
array([[[1, 1],
[2, 2],
[3, 3]],
[[4, 7],
[5, 8],
[6, 9]]])
请注意,像这样的3d数组在技术上不是元组的二维数组。但是对于大多数用途来说,这比那更好。
stack
(和dstack
)将维度扩展到输入数组,并在该新维度上进行连接。换句话说,他们这样做:
In [123]: np.concatenate((x[...,None],y[...,None]),axis=-1)
Out[123]:
array([[[1, 1],
[2, 2],
[3, 3]],
[[4, 7],
[5, 8],
[6, 9]]])