调整 Numpy 矩阵的大小
Resizing Numpy Matrix
假设我有以下 numpy 矩阵:
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
我想将此矩阵调整为 4 x 4 并用 0 填充缺失值。
我想要的是:
array([[ 1., 1., 1., 0.],
[ 1., 1., 1., 0.],
[ 1., 1., 1., 0.],
[ 0., 0., 0., 0.])
可以这么说,我的原始矩阵是 "maintained"。如果我用 .resize((4,4)) 调用它,numpy 的 resize 函数实际上会做什么:
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 0., 0., 0.],
[ 0., 0., 0., 0.]])
这似乎是从一些行中取出项目并将它们添加到其他行以适应新形状,然后用零填充其他所有内容,这不是我想要的。
如何在添加这些空行和列时将所有数据保留在 "correct" 行位置?
使用numpy.pad
例程:
In [586]: m = np.ones((3,3))
In [587]: np.pad(m, ((0,1), (0,1)), mode='constant')
Out[587]:
array([[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]])
Optional constant_values
param used in constant
mode 表示为每个轴设置填充值的值;默认为 0
分配和填充方法:
In [210]: arr = np.ones((3,3))
In [211]: res = np.zeros((4,4))
In [212]: res[:3,:3] = arr
In [213]: res
Out[213]:
array([[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]])
当填充更复杂时,np.pad
更强大,但对于这种简单的东西,它会更慢。有兴趣可以看看它的代码。无论如何,了解和理解这种简单的方法是个好主意。
假设我有以下 numpy 矩阵:
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
我想将此矩阵调整为 4 x 4 并用 0 填充缺失值。
我想要的是:
array([[ 1., 1., 1., 0.],
[ 1., 1., 1., 0.],
[ 1., 1., 1., 0.],
[ 0., 0., 0., 0.])
可以这么说,我的原始矩阵是 "maintained"。如果我用 .resize((4,4)) 调用它,numpy 的 resize 函数实际上会做什么:
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 0., 0., 0.],
[ 0., 0., 0., 0.]])
这似乎是从一些行中取出项目并将它们添加到其他行以适应新形状,然后用零填充其他所有内容,这不是我想要的。
如何在添加这些空行和列时将所有数据保留在 "correct" 行位置?
使用numpy.pad
例程:
In [586]: m = np.ones((3,3))
In [587]: np.pad(m, ((0,1), (0,1)), mode='constant')
Out[587]:
array([[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]])
Optional constant_values
param used in constant
mode 表示为每个轴设置填充值的值;默认为 0
分配和填充方法:
In [210]: arr = np.ones((3,3))
In [211]: res = np.zeros((4,4))
In [212]: res[:3,:3] = arr
In [213]: res
Out[213]:
array([[1., 1., 1., 0.],
[1., 1., 1., 0.],
[1., 1., 1., 0.],
[0., 0., 0., 0.]])
当填充更复杂时,np.pad
更强大,但对于这种简单的东西,它会更慢。有兴趣可以看看它的代码。无论如何,了解和理解这种简单的方法是个好主意。