gpt4 book ai didi

python - 如何从 numpy 而不是 numpy.ma.core 进行 pycharm 自动导入?

转载 作者:行者123 更新时间:2023-12-01 08:27:11 27 4
gpt4 key购买 nike

我使用了几个 numpy 函数,为了便于阅读,我更喜欢将它们一一导入,而不是导入为 np。

我使用 pycharm IDE,它会自动建议从 numpy.ma.core 导入,而不仅仅是 numpy。

我过去在使用屏蔽数组时遇到了问题:当我期望它会出现错误时,它没有引发错误,而且我没有意识到我正在使用屏蔽数组,因为这是从 pycharm 自动导入的。因此,我想避免使用该库,但如果 Pycharm 仍然可以自动为我执行导入,而不是我必须在代码顶部手动执行它们,我会很高兴。

这是来自 numpy 的函数复制示例。 Pycharm 建议从 numpy.ma.core 导入,我希望它仅建议 numpy。

有人吗?

Autocomplete in Pycharm

最佳答案

“问题”

您想要的函数实际上列在您显示的自动完成框中,它是numpy.lib.function_base.copy。您可以使用以下断言向自己证明这一点:

import numpy as np
assert np.lib.function_base.copy is np.copy

namespace 困惑的原因是 numpy.copy 函数实际上是 defined in numpy.lib.function_base (链接转到源)。然后通过 Numpy 中顶级 __init__.py 文件中的代码将 numpy.lib.function_base.copy 导出到顶级 numpy 命名空间来源。因此,Pycharm 在 numpy.lib.function_base.copy 处切换到 copy 的原始定义,而不是 numpy.copy 处的别名。

更好的修复

最强烈的说法是,我建议您在代码中改用如下语法:

import numpy as np
np.copy(...)

代替任何用法,例如:

from numpy import copy
copy(...)

对此有两个很好的论据,一个是哲学论据,一个是实践论据:

  • Zen of Python告诉我们

    Explicit is better than implicit.

    代码中像 np.copy 这样的用法会立即告诉读者您的意思是使用 Numpy 中的复制函数,而不是 copy.copy.特别是如果您的 .py 文件有几百行长,那么没有人(包括三个月后的您自己)会知道您在其顶部导入的内容,从而导致困惑。

  • 在实践层面上,像 np.copy 这样的语法可以避免名称冲突错误。这是一种奇特的方式来指代当您打算使用 numpy.copy 时意外使用 numpy.ma.core.copy 时遇到的问题。 Numpy 中的许多函数和方法都有非常通用的名称(copyminmax 等),这使得它们极易出现冲突错误。此外,正如您所经历的,许多具有相同名称的函数都存在于顶级 numpy 包和 Numpy 中的其他位置,例如 numpy.ma.core 。处理此问题的唯一好方法是 np.copy 样式语法。

关于python - 如何从 numpy 而不是 numpy.ma.core 进行 pycharm 自动导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165379/

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