NumPy 1.18.0 發行說明#
除了常見的錯誤修正之外,此 NumPy 版本清理並記錄了新的 random C-API,使大量舊的棄用失效,並改善了文件外觀。支援的 Python 版本為 3.5-3.8。這是最後一個支援 Python 3.5 的 NumPy 發行系列。
下游開發者應使用 Cython >= 0.29.14 以支援 Python 3.8,並使用 OpenBLAS >= 3.7 以避免 Skylake 架構上的問題。
重點#
已定義並記錄
numpy.random
的 C-API。用於連結 64 位元 BLAS 和 LAPACK 函式庫的基本基礎架構。
許多文件改進。
新功能#
多變量超幾何分佈已新增至 numpy.random
#
multivariate_hypergeometric
方法已新增至 numpy.random.Generator
類別。此方法從多變量超幾何機率分佈產生隨機變量。 (gh-13794)
棄用#
np.fromfile
和 np.fromstring
將在資料錯誤時產生錯誤#
在未來的 numpy 版本中,函式 np.fromfile
和 np.fromstring
在解析錯誤資料時將拋出錯誤。現在這會給出 DeprecationWarning
,而先前會靜默地傳回部分甚至無效的資料。此棄用也會影響 C 定義的函式 PyArray_FromString
和 PyArray_FromFile
(gh-13605)
棄用非純量陣列作為 ma.fill_value
中的填充值#
將 MaskedArray.fill_value
設定為非純量陣列已被棄用,因為將填充值廣播到陣列的邏輯很脆弱,尤其是在切片時。 (gh-13698)
棄用 PyArray_As1D
、PyArray_As2D
#
PyArray_As1D
、PyArray_As2D
已棄用,請改用 PyArray_AsCArray
(gh-14036)
棄用 np.alen
#
np.alen
已棄用。請改用 len
。 (gh-14181)
棄用財務函數#
根據 NEP-32,財務函數 fv
ipmt
、irr
、mirr
、nper
、npv
、pmt
、ppmt
、pv
和 rate
已棄用,並將從 NumPy 1.20 中移除。這些函數的替代方案是 Python 套件 numpy-financial。 (gh-14720)
numpy.ma.mask_cols
和 numpy.ma.mask_row
的 axis
引數已棄用#
此引數一直被忽略。 (gh-14996)
已過期的棄用#
PyArray_As1D
和PyArray_As2D
已移除,改用PyArray_AsCArray
(gh-14036)np.rank
已移除。此項已在 NumPy 1.10 中棄用,並已由np.ndim
取代。 (gh-14039)在 1.13.0 中棄用
expand_dims
超出範圍軸已過期。 (gh-14051)PyArray_FromDimsAndDataAndDescr
和PyArray_FromDims
已移除(它們將始終引發錯誤)。請改用PyArray_NewFromDescr
和PyArray_SimpleNew
。 (gh-14100)numeric.loads
、numeric.load
、np.ma.dump
、np.ma.dumps
、np.ma.load
、np.ma.loads
已移除,請改用pickle
方法 (gh-14256)arrayprint.FloatFormat
、arrayprint.LongFloatFormat
已移除,請改用FloatingFormat
arrayprint.ComplexFormat
、arrayprint.LongComplexFormat
已移除,請改用ComplexFloatingFormat
arrayprint.StructureFormat
已移除,請改用StructureVoidFormat
(gh-14259)np.testing.rand
已移除。此項已在 NumPy 1.11 中棄用,並已由np.random.rand
取代。 (gh-14325)numpy/lib/utils.py
中的類別SafeEval
已移除。此項已在 NumPy 1.10 中棄用。請改用np.safe_eval
。 (gh-14335)移除
np.select
中對布林值和空條件清單的已棄用支援 (gh-14583)陣列順序僅接受 ‘C’、‘F’、‘A’ 和 ‘K’。更寬鬆的選項已在 NumPy 1.11 中棄用。 (gh-14596)
np.linspace 參數
num
必須是整數。已在 NumPy 1.12 中棄用。 (gh-14620)具有多個輸出的 UFuncs 必須使用元組作為
out
kwarg。這完成了從 NumPy 1.10 開始的棄用。 (gh-14682)
檔案 numpy/testing/decorators.py
、numpy/testing/noseclasses.py
和 numpy/testing/nosetester.py
已移除。它們從未打算公開(所有相關物件都存在於 numpy.testing
命名空間中),並且自 NumPy 1.15.0 以來,匯入它們會發出棄用警告 (gh-14567)
相容性注意事項#
numpy.lib.recfunctions.drop_fields
不再傳回 None#
如果 drop_fields
用於捨棄所有欄位,則先前會完全捨棄陣列並傳回 None。現在它會傳回與輸入形狀相同的陣列,但沒有欄位。可以使用以下方式保留舊行為
dropped_arr = drop_fields(arr, ['a', 'b'])
if dropped_arr.dtype.names == ():
dropped_arr = None
將空記錄陣列轉換為 None (gh-14510)
numpy.argmin/argmax/min/max
如果陣列中存在 NaT
,則傳回 NaT
#
numpy.argmin
、numpy.argmax
、numpy.min
和 numpy.max
如果 NaT
存在於陣列中,則會傳回 NaT
。 (gh-14717)
np.can_cast(np.uint64, np.timedelta64, casting='safe')
現在為 False
#
先前這是 True
- 然而,這與 uint64
無法安全地轉換為 int64
不一致,並導致奇怪的類型解析。
如果這影響到您的程式碼,請先將 uint64
轉換為 int64
。 (gh-14718)
變更了來自 numpy.random.Generator.integers
的隨機變量流#
numpy.random.Generator.integers
中存在一個錯誤,導致對 8 位元和 16 位元整數類型進行有偏差的採樣。修復該錯誤已變更了輸出流,使其與先前版本不同。 (gh-14777)
為 datetime64
、timedelta64
新增更多 ufunc 迴圈#
np.datetime('NaT')
的行為應更像 float('Nan')
。新增所需的基礎架構,以便 np.isinf(a)
和 np.isnan(a)
將在 datetime64
和 timedelta64
dtype 上執行。也為 numpy.fmin
和 numpy.fmax
新增了遮罩 NaT
的特定迴圈。這可能需要調整面向使用者的程式碼。具體來說,不允許呼叫 numpy.isinf
或 numpy.isnan
或檢查它們是否引發異常的程式碼將需要調整,而錯誤地呼叫 numpy.fmax
和 numpy.fmin
而不是 numpy.maximum
或 numpy.minimum
的程式碼將需要調整。這也會影響 numpy.nanmax
和 numpy.nanmin
。 (gh-14841)
移動了 numpy.random
中的模組#
作為 API 清理的一部分,numpy.random
中的子模組 bit_generator
、philox
、pcg64
、sfc64, ``common
、generator
和 bounded_integers
已分別移動到 _bit_generator
、_philox
、_pcg64
、_sfc64, ``_common
、_generator
和 _bounded_integers
,以表明它們不是公共介面的一部分。 (gh-14608)
C API 變更#
PyDataType_ISUNSIZED(descr)
現在針對結構化資料類型傳回 False#
先前,這對於項目大小為 0 的任何資料類型都傳回 True,但現在這對於項目大小為 0 的非彈性資料類型 np.dtype([])
傳回 false。 (gh-14393)
新功能#
新增我們自己的 *.pxd
cython 匯入檔案#
新增了 numpy/__init__.pxd
檔案。它將用於 cimport numpy
(gh-12284)
軸元組現在可以輸入到 expand_dims
#
numpy.expand_dims
axis
關鍵字現在可以接受軸元組。先前,axis
必須是整數。 (gh-14051)
支援 64 位元 OpenBLAS#
新增了對 64 位元 (ILP64) OpenBLAS 的支援。請參閱 site.cfg.example
以瞭解詳細資訊。 (gh-15012)
為 F2PY 新增 --f2cmap
選項#
允許指定檔案以從中載入 Fortran-to-C 類型對應自訂項目。 (gh-15113)
改進#
相同大小的不同 C 數字類型具有唯一名稱#
在任何給定平台上,np.intc
、np.int_
和 np.longlong
中的兩個先前會透過其 repr
顯示為無法區分,儘管它們對應的 dtype
具有不同的屬性。np.double
和 np.longdouble
的無符號對應項以及某些平台也存在類似的問題
這些類型現在始終使用唯一的 __name__
列印。 (gh-10151)
argwhere
現在在 0d 陣列上產生一致的結果#
在 N 維陣列上,numpy.argwhere
現在始終產生形狀為 (n_non_zero, arr.ndim)
的陣列,即使 arr.ndim == 0
也是如此。先前,在這種情況下,最後一個軸的維度將為 1。 (gh-13610)
為 random.permutation
和 random.shuffle
新增 axis
引數#
先前,random.permutation
和 random.shuffle
函數只能沿第一個軸隨機排序陣列;它們現在有一個新的引數 axis
,允許沿指定的軸隨機排序。 (gh-13829)
np.random.multivariate_normal
的 method
關鍵字引數#
現在 np.random.multivariate_normal
提供 method
關鍵字引數,其可能值為 {'svd', 'eigh', 'cholesky'}
。若要使用它,請寫入 np.random.multivariate_normal(..., method=<method>)
。 (gh-14197)
為 numpy.fromstring
新增複數支援#
現在 numpy.fromstring
可以讀取複數。 (gh-14227)
當 axis
不是 None 時,numpy.unique
具有一致的軸順序#
在 numpy.unique
中使用 moveaxis
而不是 swapaxes
,以便除了引數中的軸之外的軸的順序不會被打斷。 (gh-14255)
具有布林值輸出的 numpy.matmul
現在轉換為布林值#
呼叫 numpy.matmul
,其中輸出是布林值陣列,會以 uint8 等效值(而不是 0/1)填充陣列。現在它強制輸出為 0 或 1(NPY_TRUE
或 NPY_FALSE
)。 (gh-14464)
當範圍為 2**32
時,numpy.random.randint
產生不正確的值#
在 1.17.0 中引入的實作在判斷是否使用 32 位元路徑或完整 64 位元路徑時,具有不正確的檢查,該檢查錯誤地將高低範圍為 2**32
的隨機整數產生重新導向到 64 位元產生器。 (gh-14501)
為 numpy.fromfile
新增複數支援#
現在 numpy.fromfile
可以讀取複數。 (gh-14730)
如果編譯器名為 gcc
,則新增 std=c99
#
版本 5 之前的 GCC 需要 -std=c99
命令列引數。較新的編譯器會自動開啟 C99 模式。如果編譯器名稱中包含 gcc
,則編譯器設定程式碼會自動新增程式碼。 (gh-14771)
變更#
NaT
現在排序到陣列的末尾#
現在 NaT
在排序時被有效地視為最大的整數,因此它會排序到陣列的末尾。此變更是為了與 NaN
排序行為保持一致。 (gh-12658) (gh-15068)
np.set_printoptions
中不正確的 threshold
引發 TypeError
或 ValueError
#
先前,不正確的 threshold
引發 ValueError
;現在它針對非數字類型引發 TypeError
,針對 nan
值引發 ValueError
。 (gh-13899)
在儲存具有中繼資料的 dtype 時發出警告#
當透過 numpy.save
儲存具有 metadata
的陣列時,將發出 UserWarning
。metadata
可能無法保留儲存此類陣列,如果保留了中繼資料,則載入它將導致 ValueError
。儲存和載入中的此缺點將在未來版本中解決。 (gh-14142)
numpy.distutils
附加行為已針對 LDFLAGS 和類似項目變更#
numpy.distutils
始終覆寫而不是附加到 LDFLAGS
和其他類似的環境變數,以用於編譯 Fortran 擴充功能。現在,預設行為已變更為附加 - 這是在大多數情況下預期的行為。若要保留舊的(覆寫)行為,請將 NPY_DISTUTILS_APPEND_FLAGS
環境變數設定為 0。這適用於:LDFLAGS
、F77FLAGS
、F90FLAGS
、FREEFLAGS
、FOPT
、FDEBUG
和 FFLAGS
。NumPy 1.16 和 1.17 在行為變更會影響所用編譯旗標的情況下發出了建置警告。 (gh-14248)
移除 numpy.random.entropy
,而沒有棄用#
numpy.random.entropy
已在 1.17.0 中新增至 numpy.random
命名空間。它原本應該是一個私有的 c 擴充模組,但被公開了。它已被 numpy.random.SeedSequence
取代,因此該模組已完全移除。 (gh-14498)
新增選項以安靜建置配置並使用 -Werror
進行建置#
新增了兩個新的配置選項。在 build_src
子命令執行期間,作為配置 NumPy 的一部分,會透過探測對各種執行時期函數和常式的支援,來建立 _numpyconfig.h
和 config.h
檔案。先前,在此階段非常冗長的編譯器輸出,會使更重要的資訊變得模糊不清。預設情況下,輸出會被靜音。執行 runtests.py --debug-info
將會把 --verbose-cfg
加入到 build_src
子命令,這將恢復先前的行為。
新增 CFLAGS=-Werror
以將警告轉換為錯誤,會在配置期間觸發錯誤。現在,runtests.py --warn-error
將會把 --warn-error
加入到 build
子命令,這將會滲透到 build_ext
和 build_lib
子命令。這將會把編譯器旗標加入到這些階段,並在實際建置 NumPy 本身時,將編譯器警告轉換為錯誤,從而避免 build_src
子命令的編譯器呼叫。