如何根据矩阵值更改 numpy 矩阵的形状

How to change the shape of a numpy matrix as a function of matrix values

我有一个 4×6 的 numpy 数组

x = array([[  0,   0,  50,  55, 500, 550],
           [  0,   1,  60,  65, 600, 650],
           [  1,   0,  70,  75, 700, 750],
           [  1,   1,  80,  85, 800, 850]])

我想把它转换成这个2×2×4的数组

y = array([[[ 50,  55, 500, 550],
            [ 60,  65, 600, 650]],
           [[ 70,  75, 700, 750],
            [ 80,  85, 800, 850]]])

也就是说我想把x的前两列作为i,j 坐标和行的其余部分作为 y 中位置 ij[=27= 的向量].

y[0][0] = array([ 50,  55, 500, 550])
y[0][1] = array([ 60,  65, 600, 650])
y[1][0] = array([ 70,  75, 700, 750])
y[1][1] = array([ 80,  85, 800, 850])

我想在 numpy 中有一种聪明的方法可以做到这一点,不需要我编写 for 循环,但我想不通。

您可以执行以下操作:

import numpy as np
x = np.array([[  0,   0,  50,  55, 500, 550],
              [  0,   1,  60,  65, 600, 650],
              [  1,   0,  70,  75, 700, 750],
              [  1,   1,  80,  85, 800, 850]])
y = np.zeros((2, x.shape[0]-2, x.shape[1]-2)
y[x[:,0],x[:,1]] = x[:, 2:]

您将获得:

In [17]: y
Out[17]: 
array([[[ 50.,  55., 500., 550.],
        [ 60.,  65., 600., 650.]],

       [[ 70.,  75., 700., 750.],
        [ 80.,  85., 800., 850.]]])