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 中移除關鍵字 skiprowsmissing

  • 從 np.correlate 中移除關鍵字 old_behavior

未來變更#

  • 在像 arr1 == arr2 這樣的陣列比較中,許多涉及字串或結構化 dtype 的邊緣情況過去會傳回純量,現在會發出 FutureWarningDeprecationWarning,未來將會變更為執行元素級比較或引發錯誤。

  • 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.ravelnp.diagonalnp.diag 現在保留子類型#

x.ravel()np.ravel(x) 以及 x.diagonal()np.diagonal(x) 之間存在不一致的行為,方法保留子類型,而函式則不保留。 這已得到修正,並且函式現在的行為類似於方法,除了矩陣的情況外,都保留子類型。 為了向後相容性,矩陣是特殊情況,並且仍然像以前一樣傳回 1 維陣列。 如果您需要保留矩陣子類型,請使用方法而不是函式。

rollaxisswapaxes 始終傳回視圖#

先前,除非軸順序沒有變更,否則會傳回視圖,在這種情況下,會傳回輸入陣列。 現在在所有情況下都會傳回視圖。

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。 若要在忽略無效值的情況下計算中位數或百分位數,請使用新的 nanmediannanpercentile 函式。

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 具有新的 fweightsaweights 引數#

fweightsaweights 引數透過將兩種權重類型應用於觀察向量,為共變異數計算新增了新功能。 fweights 陣列表示每個觀察向量的重複次數,而 aweights 陣列提供它們的相對重要性或機率。

支援 Python 3.5+ 中的 ‘@’ 運算子#

Python 3.5 新增了對 PEP465 中提出的矩陣乘法運算子 ‘@’ 的支援。 已實作對此的初步支援,並且也新增了等效函式 matmul,用於測試目的和在較早版本的 Python 中使用。 該函式是初步的,其可選引數的順序和數量可能會變更。

fft 函式的新引數 norm#

預設正規化使直接轉換未縮放,而反向轉換按 \(1/n\) 縮放。 可以透過將關鍵字引數 norm 設定為 "ortho"(預設值為 None)來獲得單位轉換,以便直接和反向轉換都將按 \(1/\\sqrt{n}\) 縮放。

改進#

np.poly 現在將整數輸入轉換為浮點數#

np.poly 現在會將整數類型的 1 維輸入陣列轉換為雙精度浮點數,以防止在計算 monic 多項式時發生整數溢位。 仍然可以透過傳入物件類型的陣列(例如,填充 Python 整數)來獲得更高精度的結果。

np.interp 現在可以與週期性函式一起使用#

np.interp 現在有一個新的參數 period,它提供輸入資料 xp 的週期。 在這種情況下,輸入資料會正確地正規化為給定的週期,並且會在 xp 的每個極端新增一個端點,以便封閉先前和下一個週期循環,從而產生正確的插值行為。

np.pad 支援更多 pad_widthconstant_values 的輸入類型#

constant_values 參數現在接受 NumPy 陣列和浮點值。 NumPy 陣列支援作為 pad_width 的輸入,如果其值不是整數類型,則會引發例外狀況。

np.argmaxnp.argmin 現在支援 out 引數#

為了與 ndarray.argmaxndarray.argmin 保持一致性,已將 out 參數新增至 np.argmaxnp.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.loadnp.save 具有 pickle 向後相容性旗標#

函式 np.loadnp.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.minnp.argmaxnp.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 中,這些比較現在將引發 FutureWarningDeprecationWarning,並且在未來,它們將被修改為與其他比較運算更一致地運作,例如

### 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 函式的 biasddof 引數的值在相關係數隱含的除法中被取消,因此對傳回的值沒有影響。

我們現在棄用 corrcoef 和遮罩陣列版本 ma.corrcoef 的這些引數。

由於我們正在棄用 ma.corrcoefbias 引數,我們也棄用將 allow_masked 引數用作位置引數,因為它的位置將隨著 bias 的移除而變更。 allow_masked 在適當的時候將成為僅限關鍵字的引數。

dtype 字串表示變更#

自 1.6 以來,從其字串表示形式建立 dtype 物件(例如 'f4')如果大小與現有類型不符,則會發出棄用警告,並預設為建立預設大小的類型的 dtype。 從此版本開始,這現在將引發 TypeError

唯一的例外是物件 dtype,其中 'O4''O8' 仍會發出棄用警告。 這種平台相關的表示形式將在下一個版本中引發錯誤。

為了準備即將到來的變更,物件 dtype 的字串表示形式(即 np.dtype(object).str)不再包含項目大小,即將傳回 '|O' 而不是像以前一樣的 '|O4''|O8'