如何基于值

时间:2015-07-26 02:48:31

标签: python arrays compare

我在做分类。我有两个数组,第一个是'Actual',第二个是'Predicted'。我想比较这两个数组。假设第一个数组是:

Actual = [1, 1, 2, 3, 1]

这告诉我们第一个,第二个和最后一个索引对应于类 1

'Predicted'数组是:

Predicted = [1, 1, 1, 3, 3]

这告诉我们第一和第二个索引已经准确预测。

我希望输出告诉我们那些准确预测为 1 的索引,如下所示:

output = [True, True, False, False, False]

更新 我想仅根据值 1 进行评估。如果你看到,第四个预测值是由 3 准确预测的,但我不希望这样,因为我想要评估 1 值。

4 个答案:

答案 0 :(得分:6)

假设两个列表中的length相同:

>>> [(x == y == 1) for x, y in zip(Actual, Predicted)]
[True, True, False, False, False]

感到安全;

>>> from itertools import izip_longest
>>> [(x == y == 1) for x, y in izip_longest(Actual, Predicted, fillvalue=0)]
[True, True, False, False, False]

答案 1 :(得分:2)

如果您不介意使用numpy库,那么这可以非常轻松地完成 -

In [10]: import numpy as np

In [11]: Actual=[1,1,2,3,1]

In [12]: ActualNp = np.array(Actual)

In [13]: Predicted=[1,1,1,3,3]

In [15]: PredictedNp = np.array(Predicted)

In [20]: (ActualNp == PredictedNp) & (PredictedNp == 1)
Out[20]: array([ True,  True, False, False, False], dtype=bool)

如果没有,假设您只想检查最小列表的长度(如果它们的长度不同),您可以使用zip -

>>> Actual=[1,1,2,3,1]
>>> Predicted=[1,1,1,3,3]
>>> output = [a == b == 1 for a,b in zip(Actual,Predicted)]
>>> output
[True, True, False, False, False]

答案 2 :(得分:0)

单线程简单的方法是

def get_prediction_results(prediction, actual, predicted):
 return [a == predicted[i] == prediction for i, a in enumerate(actual)]

>>> get_prediction_results(1, [1,1,2], [1,1,2])
[True, True, False]

答案 3 :(得分:0)

首先,一些数组基础:

  1. 要获取数组中元素的数量,请使用len

     x = ['a', 'b', c']
     y = len(x)  # y == 3
    
  2. 要访问数组的i元素,请使用[]

     x = ['a','b', 'c']
     y = x[1]  # y == 'b'
    
  3. 要获取值为0,1,...,n-1的迭代器,请使用range(n)

     x = list(range(3))  # x = [0, 1, 2]
    
  4. 要迭代数组的值,请使用for ... in

     x = ['a', 'b', 'c']
     for value in x:
        process(value)   # called for 'a', 'b', and 'c'
    
  5. 要比较相等的项目,请使用==(或!=表示不平等)。

  6. 完全放下这个,现在:

    def ComputeArrayDifference(a, b):
       alen = len(a)
       blen = len(b)
       if alen != blen:
          raise DifferingSizesException('Inputs have different sizes', a, b)
       result = []
       for i in range(alen):
          result.append(a[i] == b[i])
       return result