为什么没有 numpy.testing.assert_array_greater、assert_array_less_equal、assert_array_true 等?

Sup*_*ric 3 unit-testing numpy

在 中numpy.testing,有assert_array_lessassert_array_equal,但没有assert_array_less_equal函数,甚至没有assert_array_greater。我有两个问题:

  1. 这些功能是否有缺失的原因,但assert_array_less不是?
  2. 我已经使用 numpy.testing.util.assert_array_compare 编写了这些缺失函数的我自己的版本,例如:
def assert_array_greater(aa, bb):
  assert_array_compare(np.greater, aa, bb)
Run Code Online (Sandbox Code Playgroud)

这安全吗?即有没有理由assert_array_compare隐藏在numpy.testing.util,而不是生活在numpy.testing

原谅我的偏执;这些功能不存在似乎很奇怪,以至于我担心出于某种充分的理由我不应该解决这个问题。

hpa*_*ulj 6

np.testing是一个收集各种单元测试numpy文件使用的测试和工具的模块。因此,它更多地是为内部使用而设计的,而不是为最终用户使用而设计的。所以简单的答案是不需要那些额外的测试。

但是查看其中一个函数的源代码:

def assert_array_less(x, y, err_msg='', verbose=True):
    assert_array_compare(operator.__lt__, x, y, err_msg=err_msg,
                         verbose=verbose,
                         header='Arrays are not less-ordered',
                         equal_inf=False)
Run Code Online (Sandbox Code Playgroud)

看起来很容易编写使用其他operator方法之一的变体。

的“根”np.testingnumpy/testing/__init__.py,这是一个短文件。看起来它的主要任务是from .utils import *. 这是典型的子包组织。在__init__收集必要的进口,但往往没有自己的的显著代码。

  • 该文件只使用了两次 `operator`。我认为 `operator.__lt__(a,b)` 委托给 `a.__lt__(b)`,与 `a<b` 相同。`np.less` 是 `ufunc` 版本,它在某个编译级别可能最终会调用相同的代码,但是这样的细节很难追踪。 (2认同)