【问题标题】:Sum up indentical list elements总结相同的列表元素
【发布时间】:2018-04-24 18:45:51
【问题描述】:

我有一个包含元素的数组,我想总结一下准确性。我想对具有相同顺序的元素的数组求和。我宁愿不写一个 for 循环,用zip 遍历每个元素并总结它们,有没有更简单的方法来做到这一点?

两个数组如下,目前我的代码在下面用于计算总和。

yp = [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
y = [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

sums = np.sum(yp == y)

我得到的准确度为零。

【问题讨论】:

  • ypy 是 python 列表。因此 yp == y 返回 True (因为它们是相同的)。如果要计算总和,请先将它们转换为 numpy 数组。 yp = np.array(yp)
  • 哦,我明白了,这是有道理的。我会将它们转换为 numpy 看看会发生什么。
  • 这两个列表都一样吗?
  • @eagle 两个列表大小相同。
  • @AdrienLogut 的重点是np.equal 也适用于列表等。另外,np.count_nonzero 应该快一点。

标签: python numpy


【解决方案1】:

使用您的示例:

yp = [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
y = [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

# First make the two arrays in question numpy arrays.
yp = np.array(yp)
y = np.array(y)
array_length = y.shape[1] # store length of sub arrays

equal_elements = np.array(yp) == np.array(y)  # check all equal elements
sums = np.sum(equal_elements, 1) # sum the number of equal elements in each sub array, use axis 1 as each array/sample is axis 0
equal_arrays = np.where(sums==array_length)[0] # returns a tuple, so index first element immediately

number_equal_arrays = equal_arrays.shape[0]  # What elements are equal
print('Number of equal arrays %d' % number_equal_arrays)
print('Accuracy %0.2f' % (number_equal_arrays/yp.shape[0]))

打印

相等数组的个数 6

精度 1.00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多