扩展numpy ndarray的好方法?

有没有好的方法来“扩展”一个numpy ndarray?说我有一个ndarray这样的:

[[1 2]

[3 4]]

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

[[1 2 0 0 0]

[3 4 0 0 0]]

我知道必须有一些蛮力的方法(比如用零构造一个更大的数组,然后从旧的较小的数组中复制元素),只是想知道是否有Python的方法。尝试过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在内存中布置数据的方式),因此请读取那些上的文档字符串。您可能会发现,简单地串联会更好。

顺便说一句,当我需要执行此操作时,我通常只是按照您已经提到的基本方法进行操作(创建零数组并在其中分配较小的数组),我看不出有什么问题!

以上是 扩展numpy ndarray的好方法? 的全部内容, 来源链接: utcz.com/qa/412318.html

回到顶部