[英]How do I get a TIFF bytestream from an OpenCV image, rather than a numpy array?
[英]How do I make pycharm autoimport from numpy rather than numpy.ma.core?
我使用了幾個 numpy 函數,為了可讀性,我更喜歡將它們一個一個導入,而不是作為 np.numpy 導入。
我使用 pycharm IDE,它會自動建議從 numpy.ma.core 導入,而不僅僅是 numpy。
過去我在使用掩碼數組時遇到過問題:當我期望它會出現錯誤時,它沒有引發錯誤,而且我沒有意識到由於 pycharm 的這種自動導入,我正在使用掩碼數組。 所以我想避免使用該庫,但如果 Pycharm 仍然可以為我自動執行導入,而不是我必須在代碼頂部手動執行它們,我會很高興。
這是函數復制的示例,來自 numpy。 Pycharm 建議從 numpy.ma.core 導入,我希望它只建議 numpy。
任何人?
您想要的函數實際上列在您顯示的自動完成框中,它是numpy.lib.function_base.copy
。 您可以使用以下assert
向自己證明這一點:
import numpy as np
assert np.lib.function_base.copy is np.copy
命名空間混淆的原因是numpy.copy
函數實際上是在numpy.lib.function_base
定義的(鏈接到源代碼)。 numpy.lib.function_base.copy
然后通過 Numpy 源代碼中頂級__init__.py
文件中的代碼導出到頂級numpy
命名空間。 因此,Pycharm是twigging到的原始定義copy
在numpy.lib.function_base.copy
,而不是在別名numpy.copy
。
用最強烈的話說,我建議您在代碼中切換到使用如下語法:
import numpy as np
np.copy(...)
代替任何用法,例如:
from numpy import copy
copy(...)
對此有兩個很好的論據,一個是哲學論點,另一個是實踐論點:
顯式優於隱式。
在您的代碼中使用np.copy
類的np.copy
立即告訴讀者您打算使用 Numpy 中的 copy 函數,而不是copy.copy
。 特別是如果你的.py
文件有幾百行長,沒有人(包括三個月后的你自己)會知道你在它的頂部導入了什么,從而導致混亂。
在實際層面上,像np.copy
這樣的語法可以避免名稱沖突錯誤。 這是一種奇特的方式來指代您在打算使用numpy.copy
時不小心使用numpy.ma.core.copy
時遇到的那種問題。 Numpy 中的許多函數和方法都有非常通用的名稱( copy
、 min
、 max
等),使它們極易發生沖突錯誤。 此外,正如您所經歷的,頂級numpy
包和 Numpy 中的其他地方都存在許多同名的函數,例如numpy.ma.core
。 處理這個問題的唯一好方法是np.copy
樣式語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.