Numpy中如何根据数组A的NaN位置替换数组B对应位置值为NaN
实现方法
直接使用numpy布尔索引即可,这是numpy原生向量化操作,处理你582x533的数组效率极高,不会有性能问题:
# 只要A对应位置为NaN,就把B的对应位置赋值为NaN B[np.isnan(A)] = np.nan
原代码出错原因
你之前使用np.ma.masked_where的参数逻辑错误:该方法第一个参数是掩码条件,第二个参数是需要被掩码的原数组,你传入的第二个参数是np.nan而非数组B,同时掩码数组默认不会直接替换值为NaN,还要额外调用填充方法,远不如布尔索引赋值简单直接。
完整测试示例
import numpy as np A = np.array([[np.nan,np.nan,0],[4,5,6],[7,8,9]]) B = np.zeros((len(A),len(A[0]))) # 核心操作 B[np.isnan(A)] = np.nan print(B)
运行后输出的B结果为:
[[nan nan 0.] [ 0. 0. 0.] [ 0. 0. 0.]]
完全符合需求。
内容的提问来源于stack exchange,提问作者Nihilum
相关产品推荐
相关产品推荐

