gpt4 book ai didi

python - 大数组之间的 numpy bool 比较返回 False 而不是 bool 数组

转载 作者:太空狗 更新时间:2023-10-29 18:31:20 29 4
gpt4 key购买 nike

我刚刚遇到了以下问题。从两个数组开始,执行 bool 比较,如:

In [47]: a1 = np.random.randint(0,10,size=1000000)

In [48]: a2 = np.random.randint(0,10,size=1000000)

In [52]: a1[:,None] == a2
Out[52]: False

返回一个 bool 值而不是 bool 数组,而:

In [62]: a1 = np.random.randint(0,10,size=10000)

In [63]: a2 = np.random.randint(0,10,size=10000)

In [64]: a1[:,None] == a2
Out[64]:
array([[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[ True, False, False, ..., False, False, False],
[False, False, False, ..., True, False, False]], dtype=bool)

按预期工作。这是与数组大小有关的问题吗?无论大小如何,对数组的单一维度执行简单比较都有效。

In [65]: a1 = np.random.randint(0,10,size=1000000)

In [66]: a2 = np.random.randint(0,10,size=1000000)

In [67]: a1 == a2
Out[67]: array([False, False, False, ..., False, False, True], dtype=bool)

谁能重现这个问题?我正在使用 Numpy 1.9.2 和 Python 2.7.3。

编辑:只需更新到 Numpy 1.11,但问题仍然存在。

最佳答案

当我尝试比较时,我收到警告:

[...]/__main__.py:1: DeprecationWarning: elementwise == comparison failed;
this will raise an error in the future.
if __name__ == '__main__':

此警告在 NumPy 的代码中触发 here :

if (result == NULL) {
/*
* Comparisons should raise errors when element-wise comparison
* is not possible.
*/
/* 2015-05-14, 1.10 */
PyErr_Clear();
if (DEPRECATE("elementwise == comparison failed; "
"this will raise an error in the future.") < 0) {
return NULL;
}

到达此分支是因为 result == NULL,其中 result 是 NumPy 尝试 执行请求的操作时发生的情况(逐元素相等性检查,涉及广播两个数组)。

为什么这个操作失败并返回NULL?很可能是因为 NumPy 需要为数组分配巨大的内存块;足以容纳 1012 个 bool 值。这大约是 931 GB:它无法执行此操作,而是返回了 NULL

关于python - 大数组之间的 numpy bool 比较返回 False 而不是 bool 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36470793/

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