是否有"扩展" 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.resize
和np.ndarray.resize
,但是它们有一些局限性(由于Numpy在内存中列出了数据的方式),因此请阅读有关这些数据的docstring。您可能会发现,简单的串联是更好的。
顺便说一句,当我需要做到这一点时,我通常只是以您已经提到的基本方式来做(创建一个零数量并在其中分配较小的数组),我对此一无所知!