我有一个2D
NumPy
数组,我希望通过复制底行和右列来扩展两个维度的大小。
例如,来自2x2
:
[[0,1],
[2,3]]
到4x4
:
[[0,1,1,1],
[2,3,3,3],
[2,3,3,3],
[2,3,3,3]]
最好的方法是什么?
感谢。
答案 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