根据索引列表从numpy数组获取和替换值

时间:2020-06-10 18:45:50

标签: python arrays numpy replace slice

是否可以基于索引列表(例如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,但是我不想在循环中这样做,因为我可能有大数组。是执行这种操作而不是循环执行的一种方法还是一种功能?

2 个答案:

答案 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])]也会起作用,而且速度更快。