说我有以下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.]])
这似乎是从某些行中取出项目,然后将它们添加到其他行中以适应新形状,然后用零填充其他所有内容,这不是我想要的。
在添加这些空行和列时,如何将所有数据保留在“正确”行中?
答案 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
在填充更复杂时具有更大的功能,但是对于这种简单的东西来说则更慢。如果有兴趣,请查看其代码。无论如何,了解和理解这种简单方法都是一个好主意。