我需要把矩阵的所有nan都改成不同的值。我可以使用argwhere很容易地获得nan位置,但是我不确定如何以编程方式访问这些位置。以下是我的非工作代码:
myMatrix = np.array([[3.2,2,float('NaN'),3],[3,1,2,float('NaN')],[3,3,3,3]])
nanPositions = np.argwhere(np.isnan(myMatrix))
maxVal = np.nanmax(abs(myMatrix))
for pos in nanPositions :
myMatrix[pos] = maxval
问题是myMatrix[pos]不接受pos作为数组。在
^{pr2}$nan
的位置:where
生成数组的元组;argwhere
相同的值,但作为二维数组argwhere
可用于索引单个项目:这里需要
tuple()
,因为np.array([1,3])
在第一个维度上被解释为2个元素的索引。在另一种获取索引元组的方法是使用
unpacking
:因此,虽然
argparse
看起来很有用,但它比普通的where
更难使用。在如其他答案所述,您可以使用布尔索引(我已经修改了
arr
,因此isnan
测试不再有效):有关使用列表或数组编制索引以及使用元组索引的详细信息:
sacul已经介绍了生成输出的更有效的方法。但是,如果你想使用数组,你的二维矩阵索引是错误的。在
至少对我来说,这有点不直观,但你需要使用:
以下内容将满足您的期望:
^{pr2}$您可以在documentation中看到有关高级索引的更多信息
你可以这样做(IIUC):
相关问题 更多 >
编程相关推荐