__contains__ 对 ndarrays 有何作用?

2025-03-05 09:15:00
admin
原创
3
摘要:问题描述:>>> x = numpy.array([[1, 2], ... [3, 4], ... [5, 6]]) >>> [1, 7] in x True >>> [1, 2] in ...

问题描述:

>>> 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 是如何工作的。我找了相关文档却找不到。它是如何工作的?有文档记录吗?


解决方案 1:

ndarray.__contains__我在 中找到了 的来源numpy/core/src/multiarray/sequence.c。正如来源中的评论所述,

thing in x

相当于

(x == thing).any()

对于 ndarray ,无论和x的维度如何。这仅在​​ 为标量时才有意义;当 不是标量时广播的结果会导致我观察到的奇怪结果,以及我没有想到要尝试的奇怪现象。确切来源是x`thingthingthing`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;
}

解决方案 2:

似乎numpy正在__contains__针对二维情况做类似的事情:

def __contains__(self, item):
    for row in self:
        if any(item_value == row_value for item_value, row_value in zip(item, row)):
            return True
    return False

[1,7]有效,因为0第一行的第 th 个元素0与 的第 th 个元素匹配[1,7][1,2]等也是一样。对于[2,6],6 与最后一行的 6 匹配。对于[2,3],没有任何元素与同一索引处的行匹配。[1, 2, 3]很简单,因为形状不匹配。

请参阅此处了解更多信息,以及这张票。

解决方案 3:

如何检查一维是否np.ndarray等同于二维中的一行np.ndarray

正如已经指出的那样,

[1, 2] in x
相当于
([1, 2] == x).any()

[1,2,3] in x如今会抛出一个DeprecationWarning,因为它有 3 个元素长,而x.shape[1]只有 2 个。

如果你只是想知道一个是否np.ndarray包含(以人类解释的方式)于另一个np.ndarray,请使用此

>>> x = np.array([[1, 2], [3, 4], [5, 6]])
>>> np.any([np.array_equal([1, 7], el) for el in list(x)])
False
>>> np.any([np.array_equal([1, 2], el) for el in list(x)])
True
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1323  
  IPD研发管理体系作为一种先进的研发管理理念和方法,对于打造优质产品体验起着至关重要的作用。它涵盖了从产品规划、研发、上市到生命周期管理的全流程,通过整合资源、优化流程、加强团队协作等方式,确保产品能够精准满足用户需求,提升用户满意度和忠诚度。IPD研发管理体系的核心原则IPD研发管理体系以市场驱动为核心原则。这意味着...
IPD集成产品开发   4  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理模式,在众多企业中得到广泛应用。它强调跨部门团队协作、并行工程以及基于市场的产品开发理念,旨在提高产品开发效率、缩短产品上市时间、提升产品质量。而成本控制在产品开发过程中至关重要,关乎企业的利润空间和市场竞争力。...
华为IPD流程   3  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它从多个维度对产品开发过程进行优化和整合,为企业创新提供了强大的支撑。通过实施IPD产品开发流程,企业能够更加高效地将创意转化为具有市场竞争力的产品,从而在激烈的市场竞争中占据优...
华为IPD流程管理   2  
  华为作为全球知名的科技企业,其产品质量在市场上有口皆碑。华为IPD产品开发流程在确保产品质量方面发挥了至关重要的作用。IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它打破了传统产品开发中各部门之间的壁垒,强调跨部门团队协作,从产品...
IPD集成产品开发流程   2  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用