NumPy 1.10.0 發行說明#
此版本支援 Python 2.6 - 2.7 和 3.2 - 3.5。
重點#
numpy.distutils 現在支援透過傳遞給 setup.py build 的 –parallel/-j 參數進行平行編譯
numpy.distutils 現在支援透過 site.cfg 進行額外的自訂,以控制編譯參數,即執行階段函式庫、額外的連結/編譯旗標。
新增 np.linalg.multi_dot:在單一函式呼叫中計算兩個或多個陣列的點積,同時自動選擇最快的評估順序。
新函式 np.stack 提供了一個通用介面,用於沿著新軸連接陣列序列,補充了沿著現有軸連接的 np.concatenate。
將 nanprod 新增到 nanfunctions 集合中。
支援 Python 3.5 中的 ‘@’ 運算子。
已移除的支援#
已移除 _dotblas 模組。 CBLAS 支援現在位於 Multiarray 中。
已移除 testcalcs.py 檔案。
已移除 polytemplate.py 檔案。
已從 npy_3kcompat.h 中移除 npy_PyFile_Dup 和 npy_PyFile_DupClose。
已從 numpy/distutils/exec_command.py 中移除 splitcmdline。
已從 numpy/distutils/command/config.py 中移除 try_run 和 get_output。
不再支援陣列列印的 a._format 屬性。
從 np.genfromtxt 中移除關鍵字
skiprows
和missing
。從 np.correlate 中移除關鍵字
old_behavior
。
未來變更#
在像
arr1 == arr2
這樣的陣列比較中,許多涉及字串或結構化 dtype 的邊緣情況過去會傳回純量,現在會發出FutureWarning
或DeprecationWarning
,未來將會變更為執行元素級比較或引發錯誤。在
np.lib.split
中,結果中的空陣列始終具有維度(0,)
,無論要分割的陣列的維度如何。 在 Numpy 1.11 中,此行為將會變更,以便保留維度。 自 Numpy 1.9 以來,針對此變更的FutureWarning
一直存在,但由於錯誤,有時不會發出警告,並且已經保留了維度。SafeEval 類別將在 Numpy 1.11 中移除。
alterdot 和 restoredot 函式將在 Numpy 1.11 中移除。
請參閱下文以瞭解有關這些變更的更多詳細資訊。
相容性注意事項#
預設轉換規則變更#
就地運算的預設轉換已變更為 'same_kind'
。 例如,如果 n 是一個整數陣列,而 f 是一個浮點數陣列,則 n += f
將導致 TypeError
,而在先前的 Numpy 版本中,浮點數將會靜默地轉換為整數。 在不太可能發生的情況下,範例程式碼不是實際的錯誤,可以透過將其重寫為 np.add(n, f, out=n, casting='unsafe')
來以向後相容的方式更新它。 舊的 'unsafe'
預設值自 Numpy 1.7 以來已棄用。
numpy 版本字串#
開發版本的 numpy 版本字串已從 x.y.z.dev-githash
變更為 x.y.z.dev0+githash
(請注意 +),以符合 PEP 440。
放寬步幅檢查#
NPY_RELAXED_STRIDE_CHECKING 現在預設為 true。
更新:在 1.10.2 中,NPY_RELAXED_STRIDE_CHECKING 的預設值已變更為 false,以實現向後相容性。 在可以將其設為預設值之前,需要更多時間。 作為路線圖的一部分,還新增了對 f_contiguous 而非 c_contiguous 陣列的維度變更視圖的棄用。
沿著除 axis=0
之外的任何軸串連 1 維陣列會引發 IndexError
#
自 NumPy 1.7 以來,使用 axis != 0 已引發 DeprecationWarning,現在會引發錯誤。
np.ravel、np.diagonal 和 np.diag 現在保留子類型#
x.ravel() 和 np.ravel(x) 以及 x.diagonal() 和 np.diagonal(x) 之間存在不一致的行為,方法保留子類型,而函式則不保留。 這已得到修正,並且函式現在的行為類似於方法,除了矩陣的情況外,都保留子類型。 為了向後相容性,矩陣是特殊情況,並且仍然像以前一樣傳回 1 維陣列。 如果您需要保留矩陣子類型,請使用方法而不是函式。
rollaxis 和 swapaxes 始終傳回視圖#
先前,除非軸順序沒有變更,否則會傳回視圖,在這種情況下,會傳回輸入陣列。 現在在所有情況下都會傳回視圖。
nonzero 現在傳回基本 ndarray#
先前,1 維輸入(傳回基本 ndarray)和更高維輸入(保留子類別)之間存在不一致。 行為已統一,並且傳回值現在將是基本 ndarray。 子類別仍然可以透過提供它們自己的 nonzero 方法來覆寫此行為。
C API#
swapaxes 的變更也適用於 PyArray_SwapAxes C 函式,該函式現在在所有情況下都傳回視圖。
nonzero 的變更也適用於 PyArray_Nonzero C 函式,該函式現在在所有情況下都傳回基本 ndarray。
dtype 結構 (PyArray_Descr) 在末尾有一個新成員來快取其雜湊值。 這不應影響任何編寫良好的應用程式。
串連函式 DeprecationWarning 的變更也會影響 PyArray_ConcatenateArrays,
recarray 欄位傳回類型#
先前,透過屬性和索引存取的 recarray 欄位的傳回類型不一致,並且字串類型的欄位會作為 chararray 傳回。 現在,透過屬性或索引存取的欄位將針對非結構化類型的欄位傳回 ndarray,而針對結構化類型的欄位傳回 recarray。 值得注意的是,這會影響包含空白字元的字串的 recarray,因為尾隨空白字元會從 chararray 中修剪掉,但在字串類型的 ndarray 中會保留。 此外,現在會繼承巢狀結構化欄位的 dtype.type。
recarray 視圖#
將 ndarray 視為 recarray 現在會自動將 dtype 轉換為 np.record。 請參閱新的記錄陣列文件。 此外,使用非結構化 dtype 查看 recarray 不再將結果的類型轉換為 ndarray - 結果將保持為 recarray。
ufunc 的 ‘out’ 關鍵字引數現在接受陣列元組#
當使用 ufunc 的 ‘out’ 關鍵字引數時,可以提供陣列元組,每個 ufunc 輸出一個。 對於具有單一輸出的 ufunc,單一陣列也是有效的 ‘out’ 關鍵字引數。 先前可以在 ‘out’ 關鍵字引數中提供單一陣列,並且它將用作具有多個輸出的 ufunc 的第一個輸出,現在已棄用,並且將導致 DeprecationWarning,並且未來會導致錯誤。
位元組陣列索引現在引發 IndexError#
在 Python 3 中使用位元組字串為 ndarray 編製索引現在會引發 IndexError 而不是 ValueError。
包含物件與陣列的遮罩陣列#
對於這種(罕見的)遮罩陣列,取得單一遮罩項目不再傳回損壞的遮罩陣列,而是傳回項目的完全遮罩版本。
當遇到無效值時,中位數會發出警告並傳回 nan#
與平均值類似,中位數和百分位數現在會在 NaN 存在的分片中發出 Runtime warning 並傳回 NaN。 若要在忽略無效值的情況下計算中位數或百分位數,請使用新的 nanmedian 或 nanpercentile 函式。
numpy.ma.testutils 中可用的函式已變更#
numpy.testing 中的所有函式曾經都可以在 numpy.ma.testutils 中使用,但並非所有函式都經過重新定義以適用於遮罩陣列。 這些函式中的大多數現在已從 numpy.ma.testutils 中移除,並保留了一個小的子集以保持向後相容性。 從長遠來看,這應該有助於避免錯誤地使用錯誤的函式,但可能會對某些人造成匯入問題。
新功能#
從 site.cfg 讀取額外的旗標#
先前,僅能透過 distutils 套件中的程式碼變更來完成相依性函式庫和 numpy 本身的編譯自訂。 現在,numpy.distutils 從 site.cfg 的每個群組中讀取以下額外旗標
runtime_library_dirs/rpath
,設定執行階段函式庫目錄以覆寫LD_LIBRARY_PATH
extra_compile_args
,將額外的旗標新增至來源的編譯extra_link_args
,在連結函式庫時新增額外的旗標
這應該至少部分完成使用者自訂。
np.cbrt 計算實數浮點數的立方根#
np.cbrt 包裝了 C99 立方根函式 cbrt。 與 np.power(x, 1./3.) 相比,它對於負實數浮點數有明確的定義,並且速度稍快。
numpy.distutils 現在允許平行編譯#
透過將 –parallel=n 或 -j n 傳遞給 setup.py build,擴充功能的編譯現在在 n 個平行處理程序中執行。 平行化僅限於單一擴充功能內的文件,因此使用 Cython 的專案將不會受益,因為它從單一檔案建置擴充功能。
genfromtxt 有一個新的 max_rows
引數#
已將 max_rows
引數新增至 genfromtxt,以限制在單次呼叫中讀取的列數。 使用此功能,可以透過重複呼叫函式來讀取儲存在單一檔案中的多個陣列。
新函式 np.broadcast_to 用於調用陣列廣播#
np.broadcast_to 根據 numpy 的廣播規則手動將陣列廣播到給定的形狀。 此功能類似於 broadcast_arrays,實際上已重寫為在內部使用 broadcast_to,但僅需要單一陣列。
用於測試警告的新上下文管理器 clear_and_catch_warnings#
當 Python 發出警告時,它會在導致警告的模組中記錄已發出此警告,在模組屬性 __warningregistry__
中。 一旦發生這種情況,除非您清除 __warningregistry__
中的相關條目,否則無法再次發出警告。 這使得測試警告變得困難且脆弱,因為如果您的測試在另一個已導致警告的測試之後進行,您將無法發出警告或測試它。 上下文管理器 clear_and_catch_warnings
會在進入時清除模組登錄中的警告,並在退出時重設它們,這表示可以重新引發警告。
cov 具有新的 fweights
和 aweights
引數#
fweights
和 aweights
引數透過將兩種權重類型應用於觀察向量,為共變異數計算新增了新功能。 fweights
陣列表示每個觀察向量的重複次數,而 aweights
陣列提供它們的相對重要性或機率。
支援 Python 3.5+ 中的 ‘@’ 運算子#
Python 3.5 新增了對 PEP465 中提出的矩陣乘法運算子 ‘@’ 的支援。 已實作對此的初步支援,並且也新增了等效函式 matmul
,用於測試目的和在較早版本的 Python 中使用。 該函式是初步的,其可選引數的順序和數量可能會變更。
fft 函式的新引數 norm
#
預設正規化使直接轉換未縮放,而反向轉換按 \(1/n\) 縮放。 可以透過將關鍵字引數 norm
設定為 "ortho"
(預設值為 None)來獲得單位轉換,以便直接和反向轉換都將按 \(1/\\sqrt{n}\) 縮放。
改進#
使用二元搜尋的 np.digitize#
np.digitize 現在是根據 np.searchsorted 實作的。 這表示二元搜尋用於對值進行分箱,與先前的線性搜尋相比,這對於較大數量的箱子來說更具可擴展性。 它還消除了輸入陣列為 1 維的要求。
np.poly 現在將整數輸入轉換為浮點數#
np.poly 現在會將整數類型的 1 維輸入陣列轉換為雙精度浮點數,以防止在計算 monic 多項式時發生整數溢位。 仍然可以透過傳入物件類型的陣列(例如,填充 Python 整數)來獲得更高精度的結果。
np.interp 現在可以與週期性函式一起使用#
np.interp 現在有一個新的參數 period,它提供輸入資料 xp 的週期。 在這種情況下,輸入資料會正確地正規化為給定的週期,並且會在 xp 的每個極端新增一個端點,以便封閉先前和下一個週期循環,從而產生正確的插值行為。
np.pad 支援更多 pad_width
和 constant_values
的輸入類型#
constant_values
參數現在接受 NumPy 陣列和浮點值。 NumPy 陣列支援作為 pad_width
的輸入,如果其值不是整數類型,則會引發例外狀況。
np.argmax 和 np.argmin 現在支援 out
引數#
為了與 ndarray.argmax 和 ndarray.argmin 保持一致性,已將 out
參數新增至 np.argmax 和 np.argmin。 新參數的行為與在這些方法中的行為完全相同。
偵測並使用更多系統 C99 複數函式#
現在已偵測到 complex.h
中的所有函式。 以下函式有新的後備實作。
npy_ctan,
npy_cacos, npy_casin, npy_catan
npy_ccosh, npy_csinh, npy_ctanh,
npy_cacosh, npy_casinh, npy_catanh
由於這些改進,傳回值會有一些小的變更,尤其是對於邊緣情況。
np.loadtxt 支援 float.hex
方法產生的字串#
float.hex
產生的字串看起來像 0x1.921fb54442d18p+1
,因此這不是用於表示無號整數類型的十六進位。
np.isclose 正確處理整數 dtype 的最小值#
為了正確處理整數類型的最小值,np.isclose 現在會在比較期間轉換為浮點數 dtype。 這使其行為與 np.allclose 提供的行為一致。
np.allclose 在內部使用 np.isclose。#
np.allclose 現在在內部使用 np.isclose,並繼承了透過設定 equal_nan=True
將 NaN 視為相等的能力。 子類別(例如 np.ma.MaskedArray)現在也保留。
np.genfromtxt 現在可以正確處理大型整數#
np.genfromtxt 現在可以正確處理大於 32 位元系統上的 2**31-1
和大於 64 位元系統上的 2**63-1
的整數(先前在這些情況下會因 OverflowError
而崩潰)。 大於 2**63-1
的整數會轉換為浮點數值。
np.load、np.save 具有 pickle 向後相容性旗標#
函式 np.load 和 np.save 具有額外的關鍵字引數,用於控制 pickle Python 物件的向後相容性。 這使 Python 3 上的 Numpy 能夠載入包含在 Python 2 上產生的物件陣列的 npy 檔案。
MaskedArray 支援更複雜的基底類別#
正在移除基底類別的行為類似於純陣列的內建假設。 特別是,設定和取得元素和範圍將尊重 __setitem__
和 __getitem__
的基底類別覆寫,而算術將尊重 __add__
、__sub__
等的覆寫。
變更#
dotblas 功能已移至 multiarray#
dot、inner 和 vdot 的 cblas 版本已整合到 multiarray 模組中。 特別是,vdot 現在是一個 multiarray 函式,而之前不是。
更嚴格地檢查 gufunc 簽章合規性#
現在更嚴格地檢查廣義通用函式的輸入是否符合函式的簽章:現在要求輸入陣列中存在所有核心維度; 具有相同標籤的核心維度必須具有完全相同的大小; 並且必須指定輸出核心維度,可以透過相同標籤的輸入核心維度或透過傳入的輸出陣列來指定。
從 np.einsum 傳回的視圖是可寫入的#
每當輸入陣列可寫入時,np.einsum 傳回的視圖現在都是可寫入的。
np.argmin 跳過 NaT 值#
np.argmin 現在會跳過 datetime64 和 timedelta64 陣列中的 NaT 值,使其與 np.min、np.argmax 和 np.max 一致。
棄用#
涉及字串或結構化 dtype 的陣列比較#
通常,陣列上的比較運算會執行元素級比較並傳回布林陣列。 但在某些邊緣情況下,尤其是在涉及字串是結構化 dtype 的情況下,NumPy 歷史上傳回的是純量。 例如
### Current behaviour
np.arange(2) == "foo"
# -> False
np.arange(2) < "foo"
# -> True on Python 2, error on Python 3
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> False
在 1.9 中開始的工作的基礎上,在 1.10 中,這些比較現在將引發 FutureWarning
或 DeprecationWarning
,並且在未來,它們將被修改為與其他比較運算更一致地運作,例如
### Future behaviour
np.arange(2) == "foo"
# -> array([False, False])
np.arange(2) < "foo"
# -> error, strings and numbers are not orderable
np.ones(2, dtype="i4,i4") == np.ones(2, dtype="i4,i4,i4")
# -> [False, False]
SafeEval#
numpy/lib/utils.py 中的 SafeEval 類別已棄用,將在下一個版本中移除。
alterdot、restoredot#
alterdot 和 restoredot 函式不再執行任何操作,並且已棄用。
pkgload、PackageLoader#
這些載入套件的方式現在已棄用。
corrcoef 的 bias、ddof 引數#
corrcoef
函式的 bias
和 ddof
引數的值在相關係數隱含的除法中被取消,因此對傳回的值沒有影響。
我們現在棄用 corrcoef
和遮罩陣列版本 ma.corrcoef
的這些引數。
由於我們正在棄用 ma.corrcoef
的 bias
引數,我們也棄用將 allow_masked
引數用作位置引數,因為它的位置將隨著 bias
的移除而變更。 allow_masked
在適當的時候將成為僅限關鍵字的引數。
dtype 字串表示變更#
自 1.6 以來,從其字串表示形式建立 dtype 物件(例如 'f4'
)如果大小與現有類型不符,則會發出棄用警告,並預設為建立預設大小的類型的 dtype。 從此版本開始,這現在將引發 TypeError
。
唯一的例外是物件 dtype,其中 'O4'
和 'O8'
仍會發出棄用警告。 這種平台相關的表示形式將在下一個版本中引發錯誤。
為了準備即將到來的變更,物件 dtype 的字串表示形式(即 np.dtype(object).str
)不再包含項目大小,即將傳回 '|O'
而不是像以前一樣的 '|O4'
或 '|O8'
。