【发布时间】:2018-12-02 01:00:59
【问题描述】:
我有三个二维矩阵(A、B、D)和一个一维数组(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 还很陌生,但我已经尝试编写这段看似简单的代码太久了,我也没有太多运气在谷歌上搜索有关该主题的 python 文档,现在我是时间不多了。所以我在这里试试运气,如果有人有一个有效的解决方案。据我了解python,为了提高效率,人们希望尽可能避免循环,所以如果有人知道一种使用python函数的方法,那将不胜感激。提前致谢!
下面的代码不起作用,但如果上面不清楚的话,至少它可以说明我的野心。
import numpy as np
# Create the fake matrices A, B, C, D
A = np.full((4,5), np.nan)
A[0,0] = 2
A[1,1] = 2
A[2,2] = 2
A[3,3] = 2
A[1,3] = 2
B = 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 statement
for 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 statement
for 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
【问题讨论】:
标签: python python-3.x numpy nan