是否可以基于索引列表(例如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,但是我不想在循环中这样做,因为我可能有大数组。是执行这种操作而不是循环执行的一种方法还是一种功能?
答案 0 :(得分:0)
您应该使用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 :(得分:0)
使用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])]
也会起作用,而且速度更快。