我想要一个基于x,y的新numpy数组。我想要的新数组包含x元素和y元素。
这是递推公式:
new[i,j] = [x[i,j],y[i,j]]
所以,新阵列的大小是(x(= y).shape,2)
示例:
x = np.arange(4).reshape(2,2)
y = np.arrange(-3,0).reshape(2,2)
"""
x = array([[0, 1],
[2, 3]])
y = array([[-3, -2],
[-1, 0]])
"""
然后,我想在下面创建,
array([[[ 0, -3],
[ 1, -2]],
[[ 2, -1],
[ 3, 0]]])
我尝试使用这样的快速操作:
new = np.array([x,y])
"""
new =
array([[[ 0, 1],
[ 2, 3]],
[[-3, -2],
[-1, 0]]])
"""
当然,我可以使用循环,但x和y的实际大小太大。因此,计算时间会太长。我想通过快速运算来创建数组。
答案 0 :(得分:0)
In [4]: x = np.arange(4).reshape(2,2)
...: y = np.arange(-3,1).reshape(2,2)
...:
np.array
沿新的第一轴连接元素:
In [5]: np.array((x,y))
Out[5]:
array([[[ 0, 1],
[ 2, 3]],
[[-3, -2],
[-1, 0]]])
默认轴0的 np.stack
做同样的事情:
In [6]: np.stack((x,y))
Out[6]:
array([[[ 0, 1],
[ 2, 3]],
[[-3, -2],
[-1, 0]]])
但我们可以指定一个不同的新轴:
In [7]: np.stack((x,y), axis=2)
Out[7]:
array([[[ 0, -3],
[ 1, -2]],
[[ 2, -1],
[ 3, 0]]])
我们也可以通过3D转置到达那里: 在[9]中:np.array((x,y))。转置(1,2,0) 出[9]: 数组([[[0,-3], [1,-2]],
[[ 2, -1],
[ 3, 0]]])
除了x.transpose(0,1)
之前,您的双转置类似,然后以transpose(0,1,2)
结尾。
如果尺寸不同,则所需的转置更容易可视化,例如(2,3,4)代替(2,2,2)。
stack
扩展输入的维度,并进行连接。它很方便,但没有做任何你不能直接做的事情:
np.concatenate((x[...,None],y[...,None]), axis=2)