如何将数组a中的nan值同步赋值到数组b的对应位置
如何将NumPy数组a中NaN的位置同步赋值NaN到数组b对应位置?
给定两个NumPy数组:
import numpy as np a = np.array([[ 3, np.nan, 4, 1, 4, 2, 2, 3], [ 2, np.nan, 1, 3, np.nan, 4, 4, 3], [ 3, 2, np.nan, 4, np.nan, np.nan, 3, 4], [ 2, 2, 2, np.nan, 1, 1 ,np.nan, 2]]) b = np.array([[ 2, 3, 2, 2, 3, 3, 3, 3], [ 3, 3, 1, 4, 1, 4, 1, 7], [ 4, 2, 5, 4, 4, 3, 10, 4], [ 2, 4, 2, 1, 4, 1, 3, np.nan]])
需求:将数组a中所有值为NaN的位置,同步把数组b的对应位置也设为NaN。
解决方案
利用np.isnan()生成布尔掩码定位NaN位置,直接赋值即可:
# 定位a中NaN的位置,将b对应位置设为NaN b[np.isnan(a)] = np.nan # 查看结果 print(b)
执行结果
输出与预期一致:
[[ 2. nan 2. 2. 3. 3. 3. 3.] [ 3. nan 1. 4. nan 4. 1. 7.] [ 4. 2. nan 4. nan nan 10. 4.] [ 2. 4. 2. 1. nan 1. nan nan]]
说明
np.isnan(a)会生成一个和a形状完全相同的布尔数组,其中a中为NaN的位置标记为True,其余为False。- 用这个布尔数组作为索引,可以直接选中b中需要修改的位置,批量赋值
NaN,操作高效且简洁。 - 如果不想修改原数组b,可以先创建副本:
b_copy = b.copy(),再对b_copy执行上述赋值操作。
内容的提问来源于stack exchange,提问作者Bhar Jay
相关产品推荐
相关产品推荐

