如何计算两个 numpy 数组之间匹配的零元素的数量?



我有两个大小相等的numpy数组。 它们包含值10-1。 我可以计算匹配的和负数的数量,但我不确定如何计算具有相同索引和值为零的匹配元素。

我对如何在这里进行有点困惑。

下面是一些代码:

print(actual_direction.shape)
print(predicted_direction.shape)
act = actual_direction
pre = predicted_direction
part1 = act[pre == 1]
part2 = part1[part1 == 1]
result1 = part2.sum()
part3 = act[pre == -1]
part4 = part3[part3 == -1]
result2 = part4.sum() * -1
non_zeros = result1 + result2
zeros = len(act) - non_zeros
print(f'zeros : {zeros}n')
print(f'non_zeros : {non_zeros}n')
final_result = non_zeros + zeros
print(f'result1 : {result1}n')
print(f'result2 : {result2}n')
print(f'final_result : {final_result}n')

以下是打印输出:

(11279,)
(11279,)
zeros : 5745.0
non_zeros : 5534.0
result1 : 2217.0
result2 : 3317.0
final_result : 11279.0

所以我在这里所做的只是从数组的总长度中减去 1 和负数的总和。 我不能假设差值(零:5745(包含所有包含零的匹配元素,可以吗?

你可以试试这个:

import numpy as np
a=np.array([1,0,0,1,-1,-1,0,0])
b=np.array([1,0,0,1,-1,-1,0,1])
summ = np.sum((a==0) & (b==0))
print(summ)

输出:

3

您可以使用numpy.ravel()来展平数组,然后使用zip()并排比较每个元素:

import numpy as np
ar1 = np.array([[1, 0, 0],
[0, 1, 1],
[0, 1, 0]])
ar2 = np.array([[0, 0, 0],
[1, 0, 1],
[0, 1, 0]])
count = 0
for e1, e2 in zip(ar1.ravel(), ar2.ravel()):
if e1 == e2:
count += 1
print(count)

输出:

6

您也可以这样做来列出找到的所有匹配项,并打印出金额:

dup = [e1 for e1, e2 in zip(ar1.ravel(), ar2.ravel()) if e1 == e2]
print(dup)
print(len(dup))

输出:

[0, 0, 1, 0, 1, 0]
6

您有两个数组,并且想要计算这两个数组均为 0 的位置,对吧?

您可以检查数组在何处满足所需条件(a == 0),然后使用"and"运算符&检查两个数组在何处满足要求:

import numpy as np
a = np.array([1, 0, -1, 0, -1, 1, 1, 1, 1])
b = np.array([1, 0, -1, 1, 0, -1, 1, 0, 1])
both_zero = (a == 0) & (b == 0)  # [False,  True, False, False, False, False]
both_zero.sum()  # 1

在您更新的问题中,您似乎对实际值和预测之间的异同感兴趣。为此,混淆矩阵非常适合。

from sklearn.metrics import confusion_matrix
confusion_matrix(a, b, labels=[-1, 0, 1])

会给你一个混淆矩阵作为输出,告诉你有多少 -1 被预测为 -1、0 和 1,0 和 +1 也是如此:

[[1 1 0]   # -1s predicted as -1, 0 and 1
[0 1 1]   # 0s predicted as -1, 0 and 1
[1 1 3]]  # 1s predicted as -1, 0 and 1

相关内容

  • 没有找到相关文章

最新更新