如何将二维numpy数组中的-1替换为np.nan并解决索引报错问题
问题解决:numpy数组替换-1为nan的实现方案
报错原因
你代码中的嵌套循环逻辑存在索引使用错误:for row in float_sample遍历得到的row是单行数数组,不是行索引值;后续遍历得到的ele是元素实际值,也不是列索引值。用float_sample[row][ele]赋值时,把数组和浮点值作为索引传入,触发了索引类型不匹配的报错。
numpy处理这类批量元素替换无需写循环,直接用向量化布尔索引操作即可,运行效率远高于嵌套循环。
正确实现代码
import numpy as np sample = np.array([[-1, 1, -1, 1], [-1, 2, -1, 2], [-1, 3, 3, 3] ,[-1, 4, 4, 4], [-1, 5, 5, 5], [6, 6, 6, -1], [7, 7, 7, -1], [8, 8, -1, -1], [9, 9, -1, -1]]) float_sample = sample.astype(np.float64) # 批量替换所有-1为nan float_sample[float_sample == -1] = np.nan # 后续直接调用np.nanmedian计算每列忽略nan的中位数 col_medians = np.nanmedian(float_sample, axis=0)
如果你需要修改原有循环逻辑验证思路,改为遍历索引即可,仅作为逻辑修正参考,不推荐生产环境使用:
for i in range(float_sample.shape[0]): for j in range(float_sample.shape[1]): if float_sample[i][j] == -1: float_sample[i][j] = np.nan
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

