如何用numpy创建新维度? (使用快速操作)

时间:2018-05-10 11:07:48

标签: python numpy

我想要一个基于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的实际大小太大。因此,计算时间会太长。我想通过快速运算来创建数组。

1 个答案:

答案 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)