>>> 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
Run Code Online (Sandbox Code Playgroud)
我不知道__contains__ndarrays是如何工作的.我找的时候找不到相关的文档.它是如何工作的?它是否记录在任何地方?
我发现源ndarray.__contains__中numpy/core/src/multiarray/sequence.c.作为来源国的评论,
thing in x
Run Code Online (Sandbox Code Playgroud)
相当于
(x == thing).any()
Run Code Online (Sandbox Code Playgroud)
用于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;
}
Run Code Online (Sandbox Code Playgroud)
好像numpy的__contains__是做这样的事情对于一个2-d的情况下:
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
Run Code Online (Sandbox Code Playgroud)
[1,7]因为0第一行的0第th个元素匹配第th个元素,因此可以正常工作[1,7].与[1,2]等相同[2,6],6匹配最后一行中的6.使用时[2,3],没有元素匹配同一索引处的行.[1, 2, 3]因为形状不匹配所以是微不足道的.
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |