繁体   English   中英

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

[英]Getting and replace values from numpy array based on list of index

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

您应该使用array[idx] = new_values 这种方法比原生 python 循环快得多。 但是您还必须将“idx”和“new_values”转换为 numpy arrays。

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 毫秒

使用np.r_

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

Output

array([8, 9])

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM