将两个numpy数组与每个oth进行比较

2024-06-28 19:12:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个大小相等的numpy数组(碰巧是48x365),其中每个元素都是-1、0或1。我想比较一下这两个数组,看看它们有多少次是相同的,有多少次是不同的,同时将至少一个数组有一个0作为没有数据的所有时间都打折。例如:

for x in range(48):
    for y in range(365):
        if array1[x][y] != 0:
            if array2[x][y] != 0:
                if array1[x][y] == array2[x][y]:
                    score = score + 1
                else:
                    score = score - 1
return score

这需要很长时间。我想利用这样一个事实:将元素相乘并求出所有答案可能会得到相同的结果,我正在寻找一个特殊的numpy函数来帮助解决这个问题。我不确定有什么不寻常的核功能。


Tags: 数据innumpy元素利用forreturnif
3条回答

对我来说最简单的方法就是:

A = numpy.array()
B = numpy.array()

T = A - B
max = numpy.max(numpy.abs(T))

epsilon = 1e-6
if max > epsilon:
    raise Exception("Not matching arrays")

它允许快速知道数组是否相同,并允许比较浮点值!!

以下简单的计算将帮助您选择最合适的方式来处理您的案例:

In []: A, B= randint(-1, 2, size= (48, 365)), randint(-1, 2, size= (48, 365))
In []: ignore= (0== A)| (0== B)
In []: valid= ~ignore

In []: (A[valid]== B[valid]).sum()
Out[]: 3841
In []: (A[valid]!= B[valid]).sum()
Out[]: 3849
In []: ignore.sum()
Out[]: 9830

确保计算有效:

In []: 3841+ 3849+ 9830== 48* 365
Out[]: True

因此,您的score(使用这些随机值)将是:

In []: a, b= A[valid], B[valid]
In []: score= (a== b).sum()- (a!= b).sum()
In []: score
Out[]: -8

Simpy不迭代。在numpy数组上迭代会破坏使用该工具的目的。

ans = np.logical_and(
    np.logical_and(array1 != 0, array2 != 0),
    array1 == array2 )

应该给出正确的解决方案。

相关问题 更多 >