我有三个2D矩阵(A,B,D)和一个1D数组(C)。A主要包含NaN值,但也包含一些非NaN值。我想将NaN分配给矩阵D中的所有元素,同时满足以下两个条件:(1)如果A [i,j]中的元素为NaN,则D [i,j]应为NaN。(2)如果B [i,j]不在(0.3-C [j])到(0.7 + C [j])的范围内,则D [i,j]为NaN。也许是因为我对python还是一个新手,但我已经尝试了很长时间来撰写这段看似简单的代码,而且我也没有太多关于该主题的google python文档,现在我已经用完了时间。因此,如果有人有一个有效的解决方案,我会在这里碰碰运气。据我了解python,一个人希望在可能的情况下避免循环,以提高效率,因此,如果有人知道使用python函数的方法,将不胜感激。提前致谢!下面的代码不起作用,但是如果上面的代码不清楚,至少可以说明我的雄心。import numpy as np# Create the fake matrices A, B, C, DA = np.full((4,5), np.nan)A[0,0] = 2A[1,1] = 2A[2,2] = 2A[3,3] = 2A[1,3] = 2B = np.random.rand(4,5)C = np.arange(0.0, 0.1, 0.02)D = np.ones([4,5])# First loop: meant to fulfill the first statementfor i in np.arange(4): for j in np.arange(5): D[i,j][np.isnan(A[i,j])] = np.nan# Second loop: meant to fulfill the second statementfor i in np.arange(4): for j in np.arange(5): if B[i,j] < (0.3 - C[j]) or B[i,j] > (0.7 + C[j]): D[i,j] = np.nan
2 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
由于某些技术原因,矢量化逻辑运算要求使用按位运算符。因此,您的条件组合将写为:
>>> idx = np.isnan(A) | (B < 0.3 - C) | (B > 0.7 + C)
>>> D[idx] = np.nan
>>> D
array([[ 1., nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, 1., nan, nan],
[nan, nan, nan, 1., nan]])
(B是)
>>> B
array([[0.5363705 , 0.20608309, 0.60937827, 0.94685545, 0.80861546],
[0.1716229 , 0.89674041, 0.39352757, 0.84573667, 0.87769432],
[0.97621636, 0.81509133, 0.3808146 , 0.84032838, 0.07871174],
[0.11719543, 0.38021362, 0.76113843, 0.70157337, 0.66438894]])
添加回答
举报
0/150
提交
取消