我知道分配给双索引数组时会产生不好的结果,因为您分配给视图而不是直接分配给数组,但我不知道如何正确分配给双索引数组:
import numpy as np
foo = np.array([1, 2, 3, 4, 5])
bar = np.array([False, True, True, True, False])
foo[bar][1:2] = np.array([30, 40])
foo #array([1, 2, 30, 40, 5])
有没有办法将值(数组)分配给双索引数组?
假设您想要使用布尔数组和该数组中的 True 值切片进行索引,则需要计算另一个总结这些条件的布尔数组。
这是一种基于布尔数组索引的可能方法:
idx = np.arange(len(bar))
foo[idx[bar][1:3]] = np.array([30, 40])
输出:
array([ 1, 2, 30, 40, 5])
补充mozway的答案:如果不想创建额外的变量,特别是当有多个布尔数组时,可以使用
np.flatnonzero()
函数并执行嵌套索引。针对这种情况,可以简单地使用 foo[np.flatnonzero(bar)[1:3]] = np.array([30, 40])