代码之家  ›  专栏  ›  技术社区  ›  Darkowic

数量C-Api阵列_equal

  •  1
  • Darkowic  · 技术社区  · 9 年前

    我试图找到比较两个PyArrayObject的函数-类似 numpy array_equal 但我什么都没找到。你知道这样的功能吗?

    如果不是-如何导入这个numpy数组_equal到我的C代码?

    1 回复  |  直到 9 年前
        1
  •  3
  •   hpaulj    9 年前

    这是的代码 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 使用它来确定要分配和返回的数组的大小。您可以给它一个对象来比较2个数组的元素(在给定 dtype ),然后测试非零计数。

    或者,您可以构造自己的迭代器,一旦它得到一对不相等的元素,就会立即退出。使用 nditer 以获得全阵列广播功率。