Я нашел источник для ndarray.__contains__
, в numpy/core/src/multiarray/sequence.c
. В качестве комментария в исходных состояниях
thing in x
эквивалентно
(x == thing).any()
для ndarray x
, независимо от размеров x
и thing
, Это имеет смысл только тогда, когда thing
является скаляром; результаты вещания, когда thing
не являются скалярными, вызывают странные результаты, которые я наблюдал, а также такие странности, как array([1, 2, 3]) in array(1)
, которые я не думал попробовать. Точный источник -
static int
array_contains(PyArrayObject *self, PyObject *el)
{
/* equivalent to (self == el).any() */
PyObject *res;
int ret;
res = PyArray_EnsureAnyArray(PyObject_RichCompare((PyObject *)self,
el, Py_EQ));
if (res == NULL) {
return -1;
}
ret = array_any_nonzero((PyArrayObject *)res);
Py_DECREF(res);
return ret;
}