如何通过复制底行和右列扩展2D NumPy数组?

时间:2014-01-03 01:12:19

标签: python numpy

我有一个2D NumPy数组,我希望通过复制底行和右列来扩展两个维度的大小。

例如,来自2x2

[[0,1],
 [2,3]]

4x4

[[0,1,1,1],
 [2,3,3,3],
 [2,3,3,3],
 [2,3,3,3]]

最好的方法是什么?

感谢。

2 个答案:

答案 0 :(得分:3)

这里,hstack和vstack功能可以派上用场。例如,

In [16]: p = array(([0,1], [2,3]))
In [20]: vstack((p, p[-1], p[-1]))
Out[20]:
    array([[0, 1],
           [2, 3],
           [2, 3],
           [2, 3]])

记住p.T是转置:

现在您可以执行以下操作:

In [16]: p = array(([0,1], [2,3]))
In [22]: p = vstack((p, p[-1], p[-1]))
In [25]: p = vstack((p.T, p.T[-1], p.T[-1])).T
In [26]: p
Out[26]:
array([[0, 1, 1, 1],
       [2, 3, 3, 3],
       [2, 3, 3, 3],
       [2, 3, 3, 3]])

所以2行代码应该这样做......

答案 1 :(得分:1)

创建一个空数组并将所需的行,列复制到其中。

def expand(a, new_shape):
    x, y = a.shape
    r = np.empty(new_shape, a.dtype)
    r[:x, :y] = a
    r[x:, :y] = a[-1:, :]
    r[:x, y:] = a[:, -1:]
    r[x:, y:] = a[-1, -1]
    return r