调整Numpy矩阵的大小

时间:2018-06-27 20:53:45

标签: numpy matrix resize

说我有以下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.])

可以说,我的原始矩阵是“保持”的。如果我用.resize((4,4))调用numpy的resize函数,它将实际执行以下操作:

array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

这似乎是从某些行中取出项目,然后将它们添加到其他行中以适应新形状,然后用零填充其他所有内容,这不是我想要的。

在添加这些空行和列时,如何将所有数据保留在“正确”行中?

2 个答案:

答案 0 :(得分:1)

使用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.]])

constant_values模式下使用的可选constant参数表示为每个轴设置填充值的值;默认为0

答案 1 :(得分:1)

分配和填充方法:

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在填充更复杂时具有更大的功能,但是对于这种简单的东西来说则更慢。如果有兴趣,请查看其代码。无论如何,了解和理解这种简单方法都是一个好主意。