Python:numpy.matrix.resize移动元素

时间:2016-04-15 17:06:49

标签: python numpy matrix

我有一个numpy矩阵:

[[ 0.   0.2  0. ]
 [ 0.   0.   0.2]
 [ 0.   0.   0. ]]

当我调整它matrix.resize(4, 4)的大小时,为了有一个额外的行和列,它变为:

[[ 0.   0.2  0.   0. ]
 [ 0.   0.2  0.   0. ]
 [ 0.   0.   0.   0. ]
 [ 0.   0.   0.   0. ]]

第二行的元素向左移动一个。似乎所有元素都被移动了,底部会添加0.

我希望矩阵成为:

[[ 0.   0.2  0.   0. ]
 [ 0.   0.   0.2  0. ]
 [ 0.   0.   0.   0. ]
 [ 0.   0.   0.   0. ]]

我该如何解决这个问题?

请注意,我正在为许多不同的矩阵执行此操作,其中包含许多不同的值。所以我正在寻找适用于任何大小矩阵的简单解决方案,尽管添加的列和行应该包含全部0。

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用np.pad来填充数组:

import numpy as np

arr = np.array([[ 0.,   0.2,  0. ],
                [ 0.,   0.,   0.2],
                [ 0.,   0.,   0. ]])
np.pad(arr, pad_width=([0,1], [0,1]), mode='constant')

产量

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

pad_width=([0,1], [0,1])告诉np.pad添加

    顶部
  • 零行
  • 底部的一行
  • 左侧的零列
  • 右栏一栏

mode='constant'使用0作为默认的常量填充值。有很多 其他模式,例如'反映',' linear_ramp',' edge','常数'最小', '包装','对称','中位数','最大','意思'。

答案 1 :(得分:1)

np.pad完成这项工作:

import numpy as np

a = np.array([[1, 2], [3, 4]])
print a

b=np.pad(a, ((0,2),(0,1)), mode='constant', constant_values=0)
print b