【发布时间】:2017-07-28 16:20:06
【问题描述】:
我有 10 个名为 A_1,A_2.......A_10 的 txt 文件,我想将其与名为 A 的 txt 文件进行比较。我的目标是找到特定列的值之间的差异总和,但是问题出在 10 个 txt 文件(A_1,A_2.....A_10)和 A 中,我在一列中有一些错误的值等于 -1.00000E+31。我被困在如何操作代码以便 Python 在值等于 -1.00000E+31 时跳过并移动到下一个,考虑使用 np.nan 但这不起作用,因为它使总和等于 nan。任何建议都会非常有帮助。
import numpy as np
filelist=[]
for i in range(1,11):
filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)
for fname in filelist:
data=np.loadtxt(fname)
data1=np.loadtxt('/Users/Hrihaan/Desktop/A.txt')
x=data[:,1]
x1=data1[:,1]
bad = np.where(data[:,1] == -1E31)
data[bad,1] = np.nan
bad1 = np.where(data1[:,1] == -1E31)
data1[bad1,1] = np.nan
x2=(x-x1)
x3=sum(x2)
print(fname)
print(x3)
【问题讨论】:
-
既然您“考虑过使用
np.nan,但这不起作用,因为它使总和等于nan”,您应该意识到numpy.nansum存在。它返回“给定轴上的数组元素的总和,将非数字 (NaN) 视为零。” -
那行得通,非常感谢,你让我的工作轻松多了@StevenRumbalski,但问题是,Python 仍然会将 nans 视为数组元素,我可能不得不将总和除以值总数的差异,所以在这种情况下,我该如何接近,以便跳过这些 nans,当一个值等于这些 nans 时,Python 不计算差异并跳过它,所以它是不计为一个元素。
-
然后跳过
numpy.nansum,直接去numpy.nanmean。 -
这正是我所需要的,再次感谢@StevenRumbalski
-
我继续发布我的 cmets 作为答案。 (我以前很犹豫,因为我不是一个 numpy 用户。我只是搜索了文档。)
标签: python numpy difference skip