Skip to main content
 首页 » 编程设计

python之如何在维护索引的同时将一个 numpy 数组的内容复制到另一个

2025年05月04日13mfrbuaa

假设我想将一个数组的内容复制到另一个数组上,这意味着复制数组的索引将被保留并覆盖第一个数组。在我的例子中,被复制到的数组的长度总是 3,而复制的数组将是任意长度。

如果复制数组小于 三个,我可以像这样轻松地做到这一点:

>>>a = numpy.zeros(3, int) 
>>>a 
a = array([0,0,0]) 
>>>b = numpy.array([2,3]) 
>>>a[:len(b)] = b 
>>>a 
a = array([2,3,0]) 

如果复制数组大于三个,我也可以这样做:

>>>c = numpy.array([5,6,7,8]) 
>>>a = c[:3] 
>>>a 
a = array([5,6,7]) 

但是有没有更优雅的 numpy 方法可以做到这一点而不必编写 if 来捕获这两种情况?像 put() 这样的东西允许复制 到 某个索引?

编辑:

提出了一种适用于任意大小的数组 x 的单行代码:

a[:numpy.min([3, len(x)])] = x[:numpy.min([3, len(x)]) 

但还是想要更干净的东西

请您参考如下方法:

对于您的用例:

a[:len(b)] = b[:3] 

诀窍是记住切片“越过 numpy 数组的末尾”不会引发错误:

In [1]: foo = np.arange(3) 
 
In [2]: foo 
Out[2]: array([0, 1, 2]) 
 
In [3]: foo[:64] 
Out[3]: array([0, 1, 2])