Ответ 1
Я нашел источник 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;
}