Numpy C-Api array_equal

Numpy C-Api array_equal

我试图找到比较两个 PyArrayObject 的函数 - 类似于 numpy array_equal 但我没有找到任何东西。你知道这样的功能吗?

如果不是-如何将这个 numpy array_equal 导入我的 C 代码?

这是 array_equal 的代码:

def array_equal(a1, a2):
    try:
        a1, a2 = asarray(a1), asarray(a2)
    except:
        return False
    if a1.shape != a2.shape:
        return False
    return bool(asarray(a1 == a2).all())

如您所见,它不是 c-api 级函数。在确保两个输入都是数组并且形状匹配后,它执行元素 == 测试,然后是 all.

这不能可靠地用于浮点数。整数和布尔值没问题。

c-api 中可能有某种等式函数,但它的克隆可能不是您所需要的。


PyArray_CountNonzero(PyArrayObject* self)

可能是个不错的功能。我记得之前深入研究过代码,PyArray_Nonzero 使用它来确定要分配的数组大小和 return。你可以给它一个对象来比较你的 2 个数组的元素(在给定 dtype 的情况下以任何合适的方式),然后测试非零计数。

或者您可以构建自己的迭代器,一旦它获得一对不相等的元素就退出。使用nditer获得全阵广播能力