从NumPy数组中获取并替换基于索引列表的值

3

能否根据索引列表(如1和3)从numpy数组中获取值?然后,我想用另外的值替换它们。

这里是一个示例:

import numpy as np

array = np.array([0, 1, 2, 8, 4, 9, 1, 2])
idx = [3, 5]

我希望替换X[3] = 8和X[5] = 9的值,但不想使用循环,因为数组可能很大。是否有一种方法或函数可以执行此类操作但不使用循环?


1
https://dev59.com/M17Va4cB1Zd3GeqPGhos - chrisHG
2个回答

3
你应该使用array[idx] = new_values。这种方法比原生的Python循环快得多。但是你还需要将“idx”和“new_values”转换为NumPy数组。
import numpy as np

n = 100000
array = np.random.random(n)
idx = np.random.randint(0, n, n//10)
new_values = np.random.random(n//10)

%time array[idx] = new_values

时间:257微秒

def f():
    for i, v in zip(idx, new_values):
        array[i] = v
%time f()

用时:5.93毫秒


1
使用np.r_
larr = np.array([0, 1, 2, 8, 4, 9, 1, 2])
larr[np.r_[3, 5]]

输出

array([8, 9])

正如@MadPhysicist建议的那样,使用larr[np.array([3, 5])]也可以,并且速度更快。


为什么不直接使用 np.array - Mad Physicist
1
larr[np.array([3, 5])]。不要更短,但要更快。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接