我有一个numpy的数组:a = [[1, 999, 3], [-1, 1, 3], [2, 999, 6]]
我想查找数字999的每个实例,并将其替换为两个相邻数字的平均值(999始终位于中间)。
我使用以下代码尝试使此工作: np.where(a == 999, .5 * (a[0] + a[2]), a)
但是我得到的输出追加了我为第一个数组计算的值:[[1, 2, 3], [-1, 1, 3], [2, 2, 6]]
而不是:[[1, 2, 3], [-1, 1, 3], [2, 4, 6]]
我该如何解决?
您可以获取第二列等于的行索引999
,并用相应的第一列和第三列的平均值替换。我在np.ix_
这里使用该方法来避免基于整数的索引编制,而是从输入序列创建网格:
a = np.array([[1, 999, 3], [-1, 1, 3], [2, 999, 6]])
ix = a[:,1] == 999
a[ix, 1] = a[np.ix_(ix, [0,2])].mean(1)
print(a)
array([[ 1, 2, 3],
[-1, 1, 3],
[ 2, 4, 6]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句