NumPy 1.4.0 發行說明#
這個小版本包含大量的錯誤修正,以及一些新功能。它與 1.3.0 版本向後相容。
重點#
新的 datetime dtype 支援以處理陣列中的日期
更快的匯入時間
擴展的陣列包裝機制用於 ufuncs
新的鄰域迭代器(僅限 C 級)
npymath 中類似 C99 的複數函數
新功能#
擴展的陣列包裝機制用於 ufuncs#
ndarray 新增了一個 __array_prepare__ 方法,為子類別提供更大的彈性來與 ufuncs 和類似 ufunc 的函數互動。ndarray 已經提供了 __array_wrap__,它允許子類別為結果設定陣列類型,並在 ufunc 輸出時填充元資料(如 MaskedArray 的實作中所見)。對於某些應用程式,有必要在輸入時提供檢查和填充元資料。因此,__array_prepare__ 在 ufunc 初始化輸出陣列之後但在計算結果並填充它之前被呼叫。這樣,就可以在可能就地修改資料的操作之前進行檢查並引發錯誤。
自動偵測向前不相容性#
先前,如果擴充功能是針對 NumPy 版本 N 建置的,並在 NumPy M < N 的系統上使用,則 import_array 會成功,這可能會導致崩潰,因為版本 M 沒有版本 N 中的函數。從 NumPy 1.4.0 開始,這將導致 import_array 失敗,因此錯誤將會在早期被捕獲。
新的迭代器#
C API 中新增了一個新的鄰域迭代器。它可以用於迭代陣列鄰域中的項目,並且可以自動處理邊界條件。可以使用零和一填充,以及任意常數值、鏡像和循環填充。
新的多項式支援#
新增了 chebyshev 和 polynomial 模組。新的 polynomial 模組與 numpy 中目前的多項式支援不相容,但與新的 chebyshev 模組非常相似。對大多數人來說,最明顯的區別將是係數是從低次冪到高次冪指定的,低階函數不適用於 Chebyshev 和 Polynomial 類別作為參數,並且 Chebyshev 和 Polynomial 類別包含一個域。域之間的映射是線性替換,這兩個類別可以相互轉換,例如,允許將一個域中的 Chebyshev 級數展開為另一個域中的多項式。新的類別通常應該用來代替低階函數,後者提供給那些希望建立自己類別的人。
新的模組不會自動匯入 numpy 命名空間,必須使用「import numpy.polynomial」語句顯式導入。
新的 C API#
以下 C 函數已新增至 C API
PyArray_GetNDArrayCFeatureVersion:傳回已載入 numpy 的 API 版本。
PyArray_Correlate2 - 類似於 PyArray_Correlate,但實作了相關性的常用定義。輸入不會交換,並且對複數陣列取共軛。
PyArray_NeighborhoodIterNew - 一個新的迭代器,用於迭代點的鄰域,並具有自動邊界處理功能。它記錄在 C-API 參考的迭代器章節中,您可以在 numpy.core 中的 multiarray_test.c.src 檔案中找到一些範例。
新的 ufuncs#
以下 ufuncs 已新增至 C API
copysign - 傳回第一個參數的值,其符號從第二個參數複製。
nextafter - 傳回第一個參數朝向第二個參數的下一個可表示浮點數值。
新的定義#
alpha 處理器現在已定義並在 numpy/npy_cpu.h 中可用。PARISC 處理器的偵測失敗問題已修正。定義如下
NPY_CPU_HPPA:PARISC
NPY_CPU_ALPHA:Alpha
測試#
deprecated 裝飾器:此裝飾器可用於避免在測試輸出中產生混亂,同時測試 DeprecationWarning 由裝飾的測試有效地引發。
assert_array_almost_equal_nulp:比較兩個浮點數值陣列的新方法。使用此函數,如果兩個值之間沒有太多可表示的浮點數值,則認為這兩個值接近,因此在值波動很大時,比 assert_array_almost_equal 更穩健。
assert_array_max_ulp:如果兩個浮點數值之間的可表示數字超過 N 個,則引發斷言。
assert_warns:如果可調用物件未產生適當類別的警告,則引發 AssertionError,且不改變警告狀態。
重新使用 npymath#
在 1.3.0 中,我們開始將可攜式 C 數學常式放入 npymath 函式庫中,以便人們可以使用它們來編寫可攜式擴充功能。不幸的是,無法輕鬆地連結到此函式庫:在 1.4.0 中,numpy.distutils 中新增了支援,以便第三方可以重複使用此函式庫。請參閱 coremath 文件以取得更多資訊。
改進的集合運算#
在先前版本的 NumPy 中,如果輸入陣列包含重複項目,某些集合函數(intersect1d、setxor1d、setdiff1d 和 setmember1d)可能會傳回不正確的結果。這些函數現在可以正確處理包含重複項目的輸入陣列。setmember1d 已重新命名為 in1d,因為隨著接受包含重複項目的陣列的變更,它不再是集合運算,並且在概念上類似於 Python 運算子「in」的元素版本。所有這些函數現在都接受布林關鍵字 assume_unique。預設值為 False,但如果已知輸入陣列不包含重複項目,則可以將其設定為 True,這可以提高函數的執行速度。
改善#
NumPy 匯入速度明顯更快(取決於平台和電腦,從 20% 到 30%)。
排序函數現在將 nans 排序到最後。
實數排序順序為 [R, nan]。
複數排序順序為 [R + Rj, R + nanj, nan + Rj, nan + nanj]。
具有相同 nan 位置的複數會根據非 nan 部分(如果存在)進行排序。
類型比較函數已與新的 nans 排序順序保持一致。Searchsorted 現在適用於包含 nan 值的已排序陣列。
複數除法已變得更耐溢位。
複數 floor 除法已變得更耐溢位。
棄用#
以下函數已棄用
correlate:它採用新的關鍵字引數 old_behavior。當為 True(預設值)時,它會傳回與之前相同的結果。當為 False 時,計算傳統相關性,並對複數陣列取共軛。舊行為將在 NumPy 1.5 中移除,並在 1.4 中引發 DeprecationWarning。
unique1d:請改用 unique。unique1d 在 1.4 中引發棄用警告,並將在 1.5 中移除。
intersect1d_nu:請改用 intersect1d。intersect1d_nu 在 1.4 中引發棄用警告,並將在 1.5 中移除。
setmember1d:請改用 in1d。setmember1d 在 1.4 中引發棄用警告,並將在 1.5 中移除。
以下情況會引發錯誤
當對 0 維陣列進行操作時,
numpy.max
和其他函數僅接受axis=0
、axis=-1
和axis=None
。使用超出範圍的軸表示存在錯誤,因此 Numpy 現在會針對這些情況引發錯誤。不再允許指定
axis > MAX_DIMS
;Numpy 現在會引發錯誤,而不是像axis=None
那樣運作。
內部變更#
在可用時使用 C99 複數函數#
如果平台上可用,則 numpy 複數類型現在保證與 C99 複數類型 ABI 相容。此外,複數 ufunc 現在使用平台 C99 函數而不是我們自己的函數。
分割 multiarray 和 umath 原始碼#
multiarray 和 umath 的原始碼已分割成獨立的邏輯編譯單元。這應該使原始碼更適合新手。
獨立編譯#
預設情況下,multiarray(和 umath)的每個檔案都會合併為一個進行編譯,就像以前一樣,但如果 NPY_SEPARATE_COMPILATION 環境變數設定為非負值,則會啟用每個檔案的實驗性個別編譯。這使得在處理核心 numpy 時,編譯/偵錯週期快得多。
獨立核心數學函式庫#
已新增的新函數
npy_copysign
npy_nextafter
npy_cpack
npy_creal
npy_cimag
npy_cabs
npy_cexp
npy_clog
npy_cpow
npy_csqr
npy_ccos
npy_csin