为了账号安全,请及时绑定邮箱和手机立即绑定

Python:在给定其他三个矩阵的语句的情况下,将NaN分配给矩阵元素

Python:在给定其他三个矩阵的语句的情况下,将NaN分配给矩阵元素

慕运维8079593 2021-04-05 08:19:18
我有三个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]])


查看完整回答
反对 回复 2021-04-13
?
MYYA

TA贡献1868条经验 获得超4个赞

仅以矢量形式编写您提到的条件将是:


ind=(np.isnan(A)) + (B<0.3-C)*(B>0.7+C)

D[ind]=np.nan


查看完整回答
反对 回复 2021-04-13
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信