numpy元素与重载运算符的比较

Dav*_*hme 5 python numpy operator-overloading

我有两个 numpy 数组,其中包含带有重载比较运算符的对象,该运算符返回另一个对象,而不是 True 或 False。如何创建包含单个比较结果的数组。我希望结果是一个对象数组,如下所示

lhs = ... # np.array of objects with __le__ overloaded
rhs = ... # another np.array
result = np.array([l <= r for l, r in izip(lhs, rhs)])
Run Code Online (Sandbox Code Playgroud)

lhs <= rhs给了我一系列布尔值。有没有办法在不编写python循环的情况result下获得__le__方法调用结果的数组?

rya*_*son 3

Numpy 的 Github 页面指出ndarray比较运算符相当于Numpy 中的ufunc形式。因此lhs <= rhs相当于np.less_equal(lhs, rhs)

从输出np.info(np.less_equal)

 Returns
 ------- out : bool or ndarray of bool
   Array of bools, or a single bool if `x1` and `x2` are scalars.
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,你可以使用:

import operator
result = np.vectorize(operator.le)(lhs, rhs)
Run Code Online (Sandbox Code Playgroud)

np.vectorize也将允许您在比较中使用 Numpy 的广播。它将使用您的对象比较,并以与列表理解相同的形式返回这些比较结果的 numpy 数组。