Numpy:在新维度中堆叠矩阵的重复

ru1*_*111 1 python arrays numpy matrix

我有一个3x3 numpy数组,我想创建一个3x3xC矩阵,其中新维度包含原始3x3阵列的精确副本.我确信这是在某个地方被问到但我找不到最好的方法.我找到了如何为一个简单的一维数组x做到这一点:

new_x = np.tile(np.array(x, (C, 1))
Run Code Online (Sandbox Code Playgroud)

重复数组,然后执行:

np.transpose(np.expand_dims(new_x, axis=2),(2,1,0))
Run Code Online (Sandbox Code Playgroud)

这会扩展尺寸并切换轴,以便在第三维中重复数组(虽然这有效但我不确定这是否也是最好的方法) - 对于这样做最有效的方法是什么?一般nxn numpy数组?

hpa*_*ulj 5

对于只读版本,broadcast_to可以使用:

In [370]: x = np.arange(9).reshape(3,3)
In [371]: x
Out[371]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [372]: x = np.broadcast_to(x[..., None],(3,3,10))
In [373]: x
Out[373]: 
array([[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]],

       [[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]],

       [[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]]])
Run Code Online (Sandbox Code Playgroud)

或者repeat:

In [378]: x=np.repeat(x[...,None],10,2)
In [379]: x
Out[379]: 
array([[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]],

       [[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
        [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]],

       [[6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
        [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
        [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]]])
Run Code Online (Sandbox Code Playgroud)

这是一个更大的数组,其元素可以单独更改.