gpt4 book ai didi

python - __contains__ 如何为 ndarrays 工作?

转载 作者:太空狗 更新时间:2023-10-29 16:57:01 26 4
gpt4 key购买 nike

>>> x = numpy.array([[1, 2],
... [3, 4],
... [5, 6]])
>>> [1, 7] in x
True
>>> [1, 2] in x
True
>>> [1, 6] in x
True
>>> [2, 6] in x
True
>>> [3, 6] in x
True
>>> [2, 3] in x
False
>>> [2, 1] in x
False
>>> [1, 2, 3] in x
False
>>> [1, 3, 5] in x
False

我不知道 __contains__ 如何用于 ndarrays。找的时候没找到相关文档。它是如何工作的?是否在任何地方记录了它?

最佳答案

我在 numpy/core/src/multiarray/sequence.c 中找到了 ndarray.__contains__ 的源代码.作为源状态中的评论,

thing in x

相当于

(x == thing).any()

对于 ndarray x,无论 xthing 的维度如何。这只有在 thing 是标量时才有意义;当 thing 不是标量时广播的结果导致我观察到奇怪的结果,以及像 array([1, 2, 3]) in array(1) 我没想到要尝试。确切的来源是

static int
array_contains(PyArrayObject *self, PyObject *el)
{
/* equivalent to (self == el).any() */

int ret;
PyObject *res, *any;

res = PyArray_EnsureAnyArray(PyObject_RichCompare((PyObject *)self,
el, Py_EQ));
if (res == NULL) {
return -1;
}
any = PyArray_Any((PyArrayObject *)res, NPY_MAXDIMS, NULL);
Py_DECREF(res);
ret = PyObject_IsTrue(any);
Py_DECREF(any);
return ret;
}

关于python - __contains__ 如何为 ndarrays 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com