分配给双索引 numpy 数组

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

我知道分配给双索引数组时会产生不好的结果,因为您分配给视图而不是直接分配给数组,但我不知道如何正确分配给双索引数组:

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])

有没有办法将值(数组)分配给双索引数组?

python arrays numpy indexing
2个回答
2
投票

假设您想要使用布尔数组和该数组中的 True 值切片进行索引,则需要计算另一个总结这些条件的布尔数组。

这是一种基于布尔数组索引的可能方法:

idx = np.arange(len(bar))
foo[idx[bar][1:3]] = np.array([30, 40])

输出:

array([ 1,  2, 30, 40,  5])


0
投票

补充mozway的答案:如果不想创建额外的变量,特别是当有多个布尔数组时,可以使用

np.flatnonzero()
函数并执行嵌套索引。针对这种情况,可以简单地使用
foo[np.flatnonzero(bar)[1:3]] = np.array([30, 40])

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