【问题标题】:Skipping over a specific value when comparing比较时跳过特定值
【发布时间】: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


【解决方案1】:

由于您“考虑过使用np.nan,但这不起作用,因为它使总和等于nan”,numpy.nansum 应该可以完成这项工作。它返回“给定轴上的数组元素的总和,将非数字 (NaN) 视为零。”

如果您需要平均跳过numpy.nansum,直接前往numpy.nanmean

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2015-10-08
    相关资源
    最近更新 更多