Python 使用布尔掩码为numpy数组赋值:如何?
我试图在一个特定的索引处给一个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 >
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”获取与主数组对应的索引。