如何使用两个不同数组的元素依次替换numpy数组中符合条件的元素
实现方案
问题原因
你之前的写法不生效有两个核心原因:
array2[~np.isnan(array2)]返回的是原数组的副本,不是内存视图,对副本做任何修改都不会影响原数组- 直接调用
np.mean(array2)会返回np.nan,所有数值和nan比较结果都是False,也会导致替换逻辑失效
完整实现代码
import numpy as np # 初始化变量 array2 = np.array([np.nan, np.nan, np.nan, np.nan, 45, np.nan, 33, np.nan, np.nan, 32, np.nan, np.nan, 44, np.nan, 10, 53, np.nan]) ordered_array_1 = [32, 10, 33] ordered_array_2 = [44, 53, 45] # 1. 计算非空元素的均值 mean_val = np.nanmean(array2) # 2. 提取所有非空元素的索引和对应值 valid_idx = np.where(~np.isnan(array2))[0] valid_vals = array2[valid_idx] # 3. 生成比较掩码,按位置替换原数组 mask = valid_vals < mean_val array2[valid_idx[mask]] = ordered_array_1 array2[valid_idx[~mask]] = ordered_array_2 # 输出验证 print(array2)
运行后输出结果和你预期的完全一致:
[nan nan nan nan 44. nan 32. nan nan 10. nan nan 53. nan 33. 45. nan]
内容的提问来源于stack exchange,提问作者Nikolay Yasinskiy
相关产品推荐
相关产品推荐

