【问题标题】:calculating percentage error by comparing two arrays通过比较两个数组来计算百分比误差
【发布时间】:2013-12-05 14:06:17
【问题描述】:

我在两个 numpy 数组中有一些数据。

a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 2, 3, 5, 5, 6, 7]

我说数组a 是我的计算结果,数组b 是真实的结果值。我想计算结果中的错误百分比。 现在我可以遍历这两个数组并比较它们0(如果值匹配)和1(不匹配)然后将它们相加,除以总值并计算百分比误差。

有没有更快更优雅的方法来做到这一点?

【问题讨论】:

  • 任何方法都可以查看两个数组中的所有值,对吗?
  • 您可能需要提供更多关于它的用途的信息。您的算法给出了不匹配的元素数量。也许您想要不匹配的绝对值(然后可能使用 RMS)。或者您可以尝试使用相关性。但这是否有意义取决于您使用错误值的目的。
  • 是的,你是对的。我可能会从我的帖子中删除“更快”这个词。
  • 这是一个分类问题。所以我只需要知道错误分类值的数量。

标签: python arrays numpy


【解决方案1】:

首先使用a != b计算ab不同的位置,然后求这些值的平均值:

>>> import numpy as np
>>> a = np.array([1, 2, 3, 4, 5, 6, 7])
>>> b = np.array([1, 2, 3, 5, 5, 6, 7])
>>> error = np.mean( a != b )
>>> error
0.14285714285714285

【讨论】:

  • OP 有不同的b,可能值得用它重新调整您的样本(并且不会出现零错误)
【解决方案2】:

类似的东西:

>>> a = np.array([1, 2, 3, 5, 5, 6, 7])
>>> b = np.array([1, 2, 3, 4, 5, 6, 7])
>>> (a != b).sum()/float(a.size)
0.14285714285714285

更新我很好奇为什么这个稍微快一点:

a = np.random.randint(4, size=1000)
b = np.random.randint(4, size=1000)
timeit('from __main__ import a, b; (a != b).sum()/float(a.size)', number=10000)
# 0.42409151163039496
timeit('from __main__ import a, b, np; np.mean(a != b)', number=10000)
# 0.5342614773662717

【讨论】:

  • == 应替换为 !=,因为 OP 需要错误百分比。
  • np.meana!=b 转换为dtype = np.double 用于累加操作,这比将(a != b).sum() 简单地求和为np.int 所需的时间稍长。以(a != b).sum(dtype=np.double)/float(a.size)np.mean(a != b, dtype=np.int) 为例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多