通过比较两个数组计算百分比误差

Ada*_* Xu 7 python arrays numpy

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

a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 2, 3, 5, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

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

这样做有没有更快更优雅的方法?

mdm*_*dml 16

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

>>> 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
Run Code Online (Sandbox Code Playgroud)


alk*_*lko 4

大致如下:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • `np.mean` 将 `a!=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)` 为例。 (4认同)
  • `==` 应该替换为 `!=` 因为 OP 想要错误百分比。 (2认同)