是否有"扩展" Numpy Ndarray的好方法?说我有这样的ndarray:

[[1 2]
 [3 4]]

我希望每行都通过填充零来包含更多元素:

[[1 2 0 0 0]
 [3 4 0 0 0]]

我知道必须有一些蛮力的方法(例如,用零构建一个较大的数组,然后从旧小数组中复制元素),只是想知道是否有Pythonic方法可以这样做。尝试过numpy.reshape但没有工作:

import numpy as np
a = np.array([[1, 2], [3, 4]])
np.reshape(a, (2, 5))

Numpy抱怨:ValueError: total size of new array must be unchanged

答案

有索引技巧r_c_

>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> z = np.zeros((2, 3), dtype=a.dtype)
>>> np.c_[a, z]
array([[1, 2, 0, 0, 0],
       [3, 4, 0, 0, 0]])

如果这是绩效关键代码,您可能更喜欢使用等效的np.concatenate而不是索引技巧。

>>> np.concatenate((a,z), axis=1)
array([[1, 2, 0, 0, 0],
       [3, 4, 0, 0, 0]])

也有np.resizenp.ndarray.resize,但是它们有一些局限性(由于Numpy在内存中列出了数据的方式),因此请阅读有关这些数据的docstring。您可能会发现,简单的串联是更好的。

顺便说一句,当我需要做到这一点时,我通常只是以您已经提到的基本方式来做(创建一个零数量并在其中分配较小的数组),我对此一无所知!

来自: stackoverflow.com