是否可以从numpy数组中获取基于索引列表的值,比如1和3?然后,我想用另一个值来代替它们。
下面是一个例子。
import numpy as np
array = np.array([0, 1, 2, 8, 4, 9, 1, 2])
idx = [3, 5]
所以我想用另一个值代替X[3] = 8和X[5] = 9,但是我不想在循环中进行,因为我可能会有一个大数组。是否有一种方法或一个函数可以做这样的操作,但不在循环中进行?
使用 np.r_
:
larr = np.array([0, 1, 2, 8, 4, 9, 1, 2])
larr[np.r_[3, 5]]
产出
array([8, 9])
正如@疯狂的物理学家所建议的那样,使用 larr[np.array([3, 5])]
也可以,而且速度更快。
你应该使用 array[idx] = new_values
. 这种方法比原生的python循环快得多,但你必须把'idx'和'new_values'也转换成numpy数组。但是你必须将'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 µs
def f():
for i, v in zip(idx, new_values):
array[i] = v
%time f()
墙时间:5.93毫秒