调整 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 更强大,但对于这种简单的东西,它会更慢。有兴趣可以看看它的代码。无论如何,了解和理解这种简单的方法是个好主意。