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

问题描述 投票:0回答:1

是否可以从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,但是我不想在循环中进行,因为我可能会有一个大数组。是否有一种方法或一个函数可以做这样的操作,但不在循环中进行?

python arrays numpy replace slice
1个回答
0
投票

使用 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])] 也可以,而且速度更快。


0
投票

你应该使用 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毫秒

© www.soinside.com 2019 - 2024. All rights reserved.