如何根据矩阵值更改 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 中位置 i、j[=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.]]])
我有一个 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 中位置 i、j[=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.]]])