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
获得全阵广播能力
我试图找到比较两个 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
获得全阵广播能力