能否根据索引列表(如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和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的值,但不想使用循环,因为数组可能很大。是否有一种方法或函数可以执行此类操作但不使用循环?
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毫秒
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 Physicistlarr[np.array([3, 5])]
。不要更短,但要更快。 - Mad Physicist