Python 使用布尔掩码为numpy数组赋值:如何?

Python 使用布尔掩码为numpy数组赋值:如何?,python,arrays,numpy,indexing,boolean,Python,Arrays,Numpy,Indexing,Boolean,我试图在一个特定的索引处给一个numpy向量赋值,我首先要在这个向量上应用一个布尔掩码(关键的是,我希望我的索引引用“掩码”数组)。然而,令人惊讶的是,以下情况似乎不起作用: 假设我想更改“有效”向量的第一个值(掩码为真的向量),即向量的第二个“绝对”值 import numpy as np x = np.full(4, np.nan) mask = np.array([False, True, True, True]) index = 0 x[mask][index] = 3 x >

我试图在一个特定的索引处给一个numpy向量赋值,我首先要在这个向量上应用一个布尔掩码(关键的是,我希望我的索引引用“掩码”数组)。然而,令人惊讶的是,以下情况似乎不起作用:

假设我想更改“有效”向量的第一个值(掩码为真的向量),即向量的第二个“绝对”值

import numpy as np

x = np.full(4, np.nan)
mask = np.array([False, True, True, True])
index = 0

x[mask][index] = 3
x 
>>> array([nan, nan, nan, nan])

我做错了什么?

最后的
索引将被视为您正在为完成的掩码编制索引,以下是证据:

>>> x[mask]
array([ nan,  nan,  nan])
>>> x[mask][index]
nan
>>> 
因此它实际上是将
nan
更改为
3
,但是
nan
没有存储在任何地方,因此不会发生任何更改,请使用:

x[np.where(mask)[0][index]] = 3
print(x) 
x[np.where(mask)[0][index]]=3
???即使用“where”获取与主数组对应的索引。