NumPy 1.14.0 發行說明#
Numpy 1.14.0 是七個月工作的成果,包含大量的錯誤修正和新功能,以及一些可能存在相容性問題的變更。使用者會注意到的主要變更是 NumPy 陣列和純量列印方式的樣式變更,這項變更將會影響 doctest。請參閱下方詳細資訊,了解如何在需要時保留舊樣式列印。
一項影響未來開發的重大決策,是有關在 2020 年前停止支援 Python 2.7 的時程。已決定在 2018 年發行的所有版本中支援 2.7,最後一個發行版本將指定為長期版本,錯誤修正支援將延長至 2019 年。在 2019 年,所有新發行版本都將停止支援 2.7。更多詳細資訊請參閱 NEP 12。
此版本支援 Python 2.7 和 3.4 - 3.6。
重點#
np.einsum 函數在可能的情況下使用 BLAS
genfromtxt
、loadtxt
、fromregex
和savetxt
現在可以處理具有任意 Python 支援編碼的檔案。NumPy 陣列和純量列印的重大改進。
新函數#
parametrize
:裝飾器已新增至 numpy.testingchebinterpolate
:在 Chebyshev 點內插函數。format_float_positional
和format_float_scientific
:明確格式化浮點純量,並可控制捨入和填充。PyArray_ResolveWritebackIfCopy
和PyArray_SetWritebackIfCopyBase
,新的 C-API 函數,有助於實現 PyPy 相容性。
棄用#
不建議使用
np.bool_
物件來代替整數。先前operator.index(np.bool_)
是合法的,並允許諸如[1, 2, 3][np.True_]
之類的結構。這具有誤導性,因為它的行為與np.array([1, 2, 3])[np.True_]
不同。不建議對空陣列進行真值測試。若要檢查陣列是否為非空,請使用
array.size > 0
。不建議使用
minlength=None
呼叫np.bincount
。應改用minlength=0
。不建議使用
sep
引數的預設值呼叫np.fromstring
。當未提供該引數時,會使用損壞版本的np.frombuffer
,該版本會靜默接受 unicode 字串,並在將其編碼為 utf-8 (python 3) 或預設編碼 (python 2) 後,將其視為二進位資料。如果需要讀取二進位資料,則應直接使用np.frombuffer
。在非舊版列印模式中,不建議使用 array2string 的
style
選項。PyArray_SetUpdateIfCopyBase
已被棄用。對於 NumPy 版本 >= 1.14,請改用PyArray_SetWritebackIfCopyBase
,請參閱下方 C API 變更 以取得更多詳細資訊。不建議使用
UPDATEIFCOPY
陣列,請參閱下方 C API 變更 以取得詳細資訊。我們不會停止支援這些陣列,但它們與 PyPy 不相容。
未來變更#
np.issubdtype
將停止向下轉換 dtype 類型的引數。可能會預期issubdtype(np.float32, 'float64')
和issubdtype(np.float32, np.float64)
具有相同的含義 - 然而,存在一個未記載的特殊情況,將前者轉換為issubdtype(np.float32, np.floating)
,得出令人驚訝的 True 結果。此轉換現在會發出警告,說明正在進行的轉換。未來,將停用轉換,並且第一個範例將等同於第二個範例。
np.linalg.lstsq
的rcond
預設值將會變更。np.linalg.lstsq
的rcond
參數將會將其預設值變更為機器精確度乘以輸入陣列維度的最大值。當未明確傳遞rcond
時,會發出 FutureWarning。當
a
為非連續時,a.flat.__array__()
將會傳回a
的可寫入副本。先前,當a
為可寫入時,它會傳回 UPDATEIFCOPY 陣列。目前,它會傳回不可寫入的副本。請參閱 gh-7054 以取得問題的討論。非結構化 void 陣列的
.item
方法將傳回 bytes 物件。未來,在np.void
資料類型的陣列或純量上呼叫.item()
將會傳回bytes
物件,而不是緩衝區或整數陣列,與bytes(void_scalar)
傳回的相同。這可能會影響假設傳回值是可變的代码,這種情況將不再存在。現在,當發生這種情況時,會發出FutureWarning
。
相容性注意事項#
遮罩陣列檢視的遮罩也是檢視,而不是副本#
NumPy 1.11.x 中有關於此變更的 FutureWarning。簡而言之,現在的情況是,當變更遮罩陣列的檢視時,對遮罩的變更會傳播到原始陣列。先前並非如此。此變更特別影響切片。請注意,如果原始陣列的遮罩為 nomask
且檢視的遮罩已變更,則這尚未正常運作。請參閱 gh-5580 以取得更廣泛的討論。可以透過呼叫檢視的 unshare_mask
方法來取得具有遮罩副本的原始行為。
np.ma.masked
不再可寫入#
嘗試變更 masked
常數現在會發生錯誤,因為基礎陣列已標記為唯讀。過去,有可能逃避
# emulating a function that sometimes returns np.ma.masked
val = random.choice([np.ma.masked, 10])
var_arr = np.asarray(val)
val_arr += 1 # now errors, previously changed np.ma.masked.data
np.ma
函數產生 fill_value
的方式已變更#
先前,np.ma.default_fill_value
會傳回 0d 陣列,但 np.ma.minimum_fill_value
和 np.ma.maximum_fill_value
會傳回欄位的元組。相反地,所有三種方法都會傳回結構化的 np.void
物件,這已經可以在 .fill_value
屬性中找到。
此外,dtype 猜測現在與 np.array
的猜測相符 - 因此當傳遞 python 純量 x
時,maximum_fill_value(x)
始終與 maximum_fill_value(np.array(x))
相同。先前,Python 2 上的 x = long(1)
違反了此假設。
當 a
為非連續時,a.flat.__array__()
會傳回不可寫入的陣列#
目的是當 a
為非連續時,先前傳回的 UPDATEIFCOPY 陣列將在未來被可寫入的副本取代。此臨時措施旨在通知預期在這種情況下修改基礎陣列的人員,這種情況將不再發生。最有可能注意到這種情況的地方是使用 np.asarray(a.flat)
形式的表示式,或當 a.flat
作為 out 參數傳遞給 ufunc 時。
當收縮 0 長度維度時,np.tensordot
現在會傳回零陣列#
先前,當收縮 0 長度維度時,np.tensordot
會引發 ValueError。現在它會傳回零陣列,這與 np.dot
和 np.einsum
的行為一致。
numpy.testing
已重新組織#
預期這不會造成問題,但可能遺漏了一些東西。如果您在使用 numpy.testing
時遇到意外的匯入問題,請告訴我們。
np.asfarray
不再透過 dtype
引數接受非 dtypes#
先前,這會接受 dtype=some_array
,其隱含語意為 dtype=some_array.dtype
。這是未記載的,在 numpy 函數中是獨一無二的,如果使用,則可能對應於錯字。
即使對於任意階數,1D np.linalg.norm
也會保留浮點輸入類型#
先前,當傳遞任意階數時,這會升級為 float64
,儘管在簡單情況下不會這樣做
>>> f32 = np.float32([[1, 2]])
>>> np.linalg.norm(f32, 2.0, axis=-1).dtype
dtype('float32')
>>> np.linalg.norm(f32, 2.0001, axis=-1).dtype
dtype('float64') # numpy 1.13
dtype('float32') # numpy 1.14
此變更僅影響 float32
和 float16
陣列。
count_nonzero(arr, axis=())
現在計算沒有軸,而不是所有軸#
在其他地方,axis==()
始終被理解為「沒有軸」,但 count_nonzero 有一個特殊情況,將其視為「所有軸」。這是不一致且令人驚訝的。計算所有軸的正確方法始終是傳遞 axis == None
。
__init__.py
檔案已新增至測試目錄#
這是為了在不同目錄中存在重複測試檔案名稱的情況下與 pytest 相容。因此,run_module_suite
不再運作,即 python <path-to-test-file>
會導致錯誤。
非結構化 void 陣列上的 .astype(bool)
現在對每個元素呼叫 bool
#
在 Python 2 上,void_array.astype(bool)
始終會傳回 True
的陣列,除非 dtype 為 V0
。在 Python 3 上,此操作通常會崩潰。向前看,astype 符合 bool(np.void)
的行為,將所有零的緩衝區視為 false,而將其他任何內容視為 true。仍然可以使用 arr.dtype.itemsize == 0
來檢查 V0
。
MaskedArray.squeeze
永遠不會傳回 np.ma.masked
#
np.squeeze
已記載為傳回檢視,但遮罩變體有時會傳回 masked
,這不是檢視。這已修正,因此結果始終是原始遮罩陣列的檢視。這會破壞任何使用 masked_arr.squeeze() is np.ma.masked
的程式碼,但會修正寫入 squeeze() 結果的程式碼。
將 can_cast
的第一個參數從 from
重新命名為 from_
#
先前的參數名稱 from
是 Python 中的保留關鍵字,這使得按名稱傳遞引數變得困難。這已透過將參數重新命名為 from_
來修正。
當傳遞錯誤類型時,isnat
會引發 TypeError
#
當未傳遞 datetime
或 timedelta
類型的變數時,ufunc isnat
過去會引發 ValueError
。這已變更為引發 TypeError
。
當傳遞錯誤類型時,dtype.__getitem__
會引發 TypeError
#
當使用浮點數索引時,dtype 物件過去會引發 ValueError
。
使用者定義的類型現在需要實作 __str__
和 __repr__
#
先前,使用者定義的類型可以回退到 numpy 中實作的 __str__
和 __repr__
的預設實作,但現在已移除。現在,使用者定義的類型將回退到 python 預設 object.__str__
和 object.__repr__
。
陣列列印的許多變更,可以使用新的「舊版」列印模式停用#
ndarray 和 numpy 純量的 str
和 repr
已進行各種變更。這些變更可能會破壞下游使用者的 doctest。
可以停用這些新行為,以透過啟用新的 1.13「舊版」列印模式,大致重現 numpy 1.13 行為。這可以透過呼叫 np.set_printoptions(legacy="1.13")
或使用 np.array2string
的新 legacy
引數來啟用,例如 np.array2string(arr, legacy='1.13')
。
總之,主要變更如下
對於浮點類型
浮點陣列的
repr
通常會省略先前在符號位置列印的空格。請參閱np.set_printoptions
的新sign
選項。浮點陣列和純量使用新的演算法進行十進位表示法,提供最短的唯一表示法。這通常會縮短
float16
小數輸出,有時也會縮短float32
和float128
輸出。float64
應該不受影響。請參閱np.set_printoptions
的新floatmode
選項。以科學記號標記法列印的浮點陣列不再使用固定精確度,現在改為顯示最短的唯一表示法。
浮點純量的
str
不再在 python2 中截斷。
對於其他資料類型
非有限複數純量列印為
nanj
而不是nan*j
。datetime 陣列中的
NaT
值現在已正確對齊。np.void
資料類型的陣列和純量現在使用十六進位標記法列印。
對於換行
如果陣列輸出的最後一行沒有空間,ndarray reprs 的「dtype」部分現在將會列印在下一行。
現在始終會遵循
linewidth
格式選項。陣列的 repr 或 str 永遠不會超過此值,除非單一元素太寬。陣列字串的最後一行永遠不會比先前的行有更多元素。
如果元素太寬,則不再在第一行插入額外空格。
對於摘要 (使用
...
來縮短長陣列)不再為
str
插入尾隨逗號。先前,str(np.arange(1001))
給出'[ 0 1 2 ..., 998 999 1000]'
,其中有一個額外逗號。對於 2-D 及以上的陣列,當
...
列印在其自身行上以摘要除最後一個軸之外的任何軸時,現在會將換行符附加到該行,以符合其前導換行符,並移除尾隨空格字元。
MaskedArray
陣列現在使用逗號分隔列印的元素,始終列印 dtype,並正確地將長陣列的元素換行到多行。如果有多個維度,則陣列屬性現在以新的「靠左對齊」列印樣式列印。recarray
陣列不再在其 dtype 之前列印尾隨空格,並換行到正確的欄數。0d 陣列不再具有其自身特有的
str
和repr
實作。np.array2string
的style
引數已被棄用。bool
資料類型的陣列將在repr
中省略資料類型。使用者定義的
dtypes
(np.generic
的子類別) 現在需要實作__str__
和__repr__
。
以下更詳細地描述了其中一些變更。如果您需要為了 doctest 或其他原因保留先前的行為,您可能想要執行類似以下的操作
# FIXME: We need the str/repr formatting used in Numpy < 1.14.
try:
np.set_printoptions(legacy='1.13')
except TypeError:
pass
C API 變更#
與 PyPy 相容的 UPDATEIFCOPY
陣列替代方案#
UPDATEIFCOPY
陣列是現有陣列的連續副本,可能具有不同的維度,當其 refcount 變為零並解除配置時,其內容會複製回原始陣列。由於 PyPy 未使用 refcount,因此它們無法在 PyPy 中正確運作。NumPy 正在逐步淘汰其內部使用,並且新增了兩個新的 C-API 函數:
PyArray_SetWritebackIfCopyBase
PyArray_ResolveWritebackIfCopy
,
以及補充旗標 NPY_ARRAY_WRITEBACKIFCOPY
。使用新功能也需要在新建立陣列時變更一些旗標,即:NPY_ARRAY_INOUT_ARRAY
應替換為 NPY_ARRAY_INOUT_ARRAY2
,而 NPY_ARRAY_INOUT_FARRAY
應替換為 NPY_ARRAY_INOUT_FARRAY2
。使用這些新旗標建立的陣列隨後將具有 WRITEBACKIFCOPY
語意。
如果 PyPy 相容性不是問題,則可以忽略這些新函數,儘管會出現 DeprecationWarning
。如果您確實希望追求 PyPy 相容性,則可以在 c-api 文件和 how-to-extend 中的範例中找到有關這些函數及其用法的更多資訊。
新功能#
文字 IO 函數的編碼引數#
genfromtxt
、loadtxt
、fromregex
和 savetxt
現在可以透過編碼引數處理 Python 支援的任意編碼檔案。為了向後相容性,引數預設為特殊 bytes
值,該值繼續將文字視為原始位元組值,並繼續將 latin1 編碼的位元組傳遞給自訂轉換器。使用任何其他值 (包括系統預設的 None
) 都會將函數切換到真正的文字 IO,因此使用者會在結果陣列中收到 unicode 字串而不是位元組。
外部 nose
外掛程式可由 numpy.testing.Tester
使用#
numpy.testing.Tester
現在可以識別 nose
內建外掛程式之外的 nose
外掛程式。這允許使用例如 nose-timer
,如下所示:np.test(extra_argv=['--with-timer', '--timer-top-n', '20'])
以取得 20 個最慢測試的執行時間。額外的關鍵字 timer
也已新增至 Tester.test
,因此 np.test(timer=20)
也會報告 20 個最慢的測試。
parametrize
裝飾器已新增至 numpy.testing
#
基本的 parametrize
裝飾器現在可在 numpy.testing
中使用。它旨在允許重寫 pytest 中已棄用的基於 yield 的測試,以便於未來過渡到 pytest。nose 測試框架已多年未獲得支援,並且看起來像是棄置軟體。
新的 parametrize
裝飾器不具有 pytest 中裝飾器的完整功能。它不適用於類別、不支援巢狀結構,且不替換變數名稱。即便如此,它應該足以重寫 NumPy 測試。
chebinterpolate
函數已新增至 numpy.polynomial.chebyshev
#
新的 chebinterpolate
函數會在第一類切比雪夫點處內插給定函數。新的 Chebyshev.interpolate
類別方法新增了對在任意區間上使用第一類縮放和位移切比雪夫點進行內插的支援。
支援在 Python 3 中讀取 lzma 壓縮文字檔案#
對於包含 lzma
模組的 Python 版本,文字 IO 函數現在可以透明地從具有 xz
或 lzma
副檔名的檔案中讀取。
sign
選項已新增至 np.setprintoptions
和 np.array2string
#
此選項控制浮點數型別的正負號列印,並且可能是字元 ‘-’、‘+’ 或 ‘ ‘ 之一。使用 ‘+’ 時,numpy 始終列印正值的正負號,使用 ‘ ‘ 時,它始終在正值的正負號位置列印空格(空白字元),而使用 ‘-’ 時,它將省略正值的正負號字元。新的預設值為 ‘-’。
相對於 numpy 1.13,這個新的預設值變更了浮點數輸出。舊的行為可以在 1.13「傳統」列印模式中取得,請參閱上方的相容性注意事項。
hermitian
選項已新增至``np.linalg.matrix_rank``#
新的 hermitian
選項允許在標準 SVD 基礎矩陣秩計算與針對對稱/厄米矩陣更有效率的特徵值基礎方法之間進行選擇。
threshold
和 edgeitems
選項已新增至 np.array2string
#
這些選項先前可以使用 np.set_printoptions
來控制,但現在可以在每次呼叫時作為 np.array2string
的引數來變更。
concatenate
和 stack
獲得了 out
引數#
現在,所需 dtype 的預先分配緩衝區可以用於這些函數的輸出。
支援 Windows 上的 PGI flang 編譯器#
PGI flang 編譯器是 NVIDIA 在 Apache 2 授權下發布的 LLVM 的 Fortran 前端。它可以透過以下方式調用:
python setup.py config --compiler=clang --fcompiler=flang install
對於這個新的編譯器幾乎沒有經驗,因此,使用它的人員提供的任何回饋都將不勝感激。
改進#
random.noncentral_f
中的分子自由度只需要為正數。#
在 NumPy 1.14.0 之前,分子自由度需要 > 1,但分佈對於 > 0 的值是有效的,這是新的要求。
GIL 已針對所有 np.einsum
變體發布#
某些具有加速迴圈版本的特定迴圈結構在 NumPy 1.14.0 之前未發布 GIL。此疏忽已得到修正。
np.einsum 函數將在可能的情況下使用 BLAS 並預設進行最佳化#
np.einsum
函數現在將在適當的時候呼叫 np.tensordot
。由於 np.tensordot
在可能的情況下使用 BLAS,因此將加快執行速度。預設情況下,np.einsum
也將嘗試最佳化,因為相對於速度的潛在提升,額外負擔很小。
f2py
現在處理維度為 0 的陣列#
f2py
現在允許配置維度為 0 的陣列。這允許更一致地處理下游的邊角案例。
numpy.distutils
支援同時使用 MSVC 和 mingw64-gfortran#
Numpy distutils 現在支援同時使用 Mingw64 gfortran 和 MSVC 編譯器。這使得在 Windows 上產生包含 Fortran 程式碼的 Python 擴充模組成為可能,同時保留與 Python.org 發佈的二進制檔案的相容性。並非所有使用案例都受到支援,但大多數用於封裝 Fortran 以用於 Python 的常見方式都是可行的。
此模式中的編譯通常會自動啟用,並且可以透過 setup.py
的 --fcompiler
和 --compiler
選項來選擇。此外,支援將 Fortran 程式碼連結到靜態 OpenBLAS;預設情況下,會尋找與 gfortran 相容的靜態封存檔 openblas.a
。
np.linalg.pinv
現在適用於堆疊矩陣#
先前它僅限於單個 2d 陣列。
numpy.save
將資料對齊到 64 位元組而不是 16 位元組#
使用 numpy.save
以 npy
格式儲存 NumPy 陣列會在陣列資料之前插入填充,以將其對齊在 64 位元組處。先前這僅為 16 位元組(有時甚至更少,因為版本 2 的程式碼中存在錯誤)。現在對齊為 64 位元組,這與最常見的 SIMD 指令集相符,並且也是最常見的快取行大小。這使得 npy
檔案更容易在使用 mmap
開啟它們的程式中使用,尤其是在 Linux 上,其中 mmap
偏移量必須是頁面大小的倍數。
NPZ 檔案現在可以在不使用暫存檔的情況下寫入#
在 Python 3.6+ 中,numpy.savez
和 numpy.savez_compressed
現在直接寫入 ZIP 檔案,而無需建立中間暫存檔。
更好地支援空的結構化和字串型別#
結構化型別可以包含零個欄位,而字串 dtype 可以包含零個字元。零長度字串仍然無法直接建立,必須透過結構化 dtype 建構
str0 = np.empty(10, np.dtype([('v', str, N)]))['v']
void0 = np.empty(10, np.void)
始終可以使用這些,但現在支援針對這些陣列的以下操作
arr.sort()
arr.view(bytes)
arr.resize(…)
pickle.dumps(arr)
在 np.lib.financial
中支援 decimal.Decimal
#
除非另有說明,否則 financial
套件中的所有函數現在都支援使用 decimal.Decimal
內建型別。
浮點數列印現在使用 “dragon4” 演算法來獲得最短的十進制表示法#
浮點數值(16、32、64 和 128 位元)的 str
和 repr
現在列印為給出最短的十進制表示法,該表示法可從相同型別的其他值中唯一識別該值。先前,這僅適用於 float64
值。現在,剩餘的浮點數型別通常會比 numpy 1.13 中的更短。以科學記號標記法列印的陣列現在也使用最短的科學表示法,而不是像以前那樣使用固定精度。
此外,與 python2 float 不同,浮點數純量純量的 str 將不再在 python2 中被截斷。np.double 純量現在具有與 python3 float 相同的
str
和repr
。
提供了新的函數 np.format_float_scientific
和 np.format_float_positional
來產生這些十進制表示法。
已將新的選項 floatmode
新增至 np.set_printoptions
和 np.array2string
,這可以控制陣列中列印元素的唯一性和捨入。新的預設值為 floatmode='maxprec'
,其中 precision=8
,這將最多列印 8 個小數位,如果元素可以用更少的小數位唯一表示,則列印更少的小數位。一個有用的新模式是 floatmode="unique"
,它將輸出足夠的位數來唯一指定陣列元素。
具有像 inf*j
或 nan*j
這樣值的 Numpy 複數浮點數純量現在像純 Python complex
型別一樣列印為 infj
和 nanj
。
FloatFormat
和 LongFloatFormat
類別已被取代,應替換為 FloatingFormat
。同樣,ComplexFormat
和 LongComplexFormat
應替換為 ComplexFloatingFormat
。
void
資料型別元素現在以十六進制標記法列印#
與 python bytes
型別相容的十六進制表示法現在針對非結構化 np.void
元素(例如,V4
資料型別)列印。先前,在 python2 中,元素的原始 void 資料被列印到 stdout,或者在 python3 中,顯示了整數位元組值。
現在可以獨立自訂 void
資料型別的列印樣式#
現在可以使用 np.set_printoptions
的 formatter
引數,使用 'void'
鍵,而不是像以前一樣使用全部捕捉的 numpystr
鍵,來獨立自訂 np.void
陣列的列印樣式。
減少 np.loadtxt
的記憶體使用量#
np.loadtxt
現在以區塊而不是一次性讀取檔案,這顯著減少了大型檔案的記憶體使用量。
變更#
結構化陣列的多欄位索引/賦值#
結構化陣列的多個欄位的索引和賦值已在許多方面發生了變更,如先前的版本中所警告的那樣。
首先,使用多個欄位(例如,arr[['f1', 'f3']]
)索引結構化陣列會傳回原始陣列的檢視,而不是副本。傳回的檢視將具有與原始陣列中的介入欄位相對應的額外填充位元組,這與 1.13 中的副本不同,這將影響諸如 arr[['f1', 'f3']].view(newdtype)
之類的程式碼。
其次,結構化陣列之間的賦值現在將「按位置」而不是「按欄位名稱」發生。目的地的第 N 個欄位將設定為來源的第 N 個欄位,而與欄位名稱無關,這與 numpy 版本 1.6 到 1.13 不同,在 numpy 版本 1.6 到 1.13 中,目的地陣列中的欄位設定為來源陣列中名稱相同的欄位,如果來源沒有欄位,則設定為 0。
相應地,在計算 dtype 相等性時,結構化 dtype 中欄位的順序現在很重要。例如,對於 dtype
x = dtype({'names': ['A', 'B'], 'formats': ['i4', 'f4'], 'offsets': [0, 4]})
y = dtype({'names': ['B', 'A'], 'formats': ['f4', 'i4'], 'offsets': [4, 0]})
表達式 x == y
現在將傳回 False
,這與以前不同。這使得基於字典的 dtype 規格(如 dtype({'a': ('i4', 0), 'b': ('f4', 4)})
)在 python < 3.6 中很危險,因為在這些版本中,字典鍵順序未保留。
從結構化陣列賦值到布林陣列現在會引發 ValueError,這與 1.13 不同,在 1.13 中,它始終將目的地元素設定為 True
。
從具有多個欄位的結構化陣列賦值到非結構化陣列現在會引發 ValueError。在 1.13 中,這僅將來源的第一個欄位複製到目的地。
現在不允許在多欄位索引中使用欄位「標題」,並且不允許在多欄位索引中重複欄位名稱。
使用者指南中結構化陣列的文件已大幅更新,以反映這些變更。
整數和 Void 純量現在不受 np.set_string_function
的影響#
先前,與大多數其他 numpy 純量不同,整數和 void 純量的 str
和 repr
可以由 np.set_string_function
控制。這不再可能。
0d 陣列列印已變更,array2string
的 style
引數已取代#
先前,0d 陣列的 str
和 repr
具有特有的實作,對於 0d 陣列 a
,它們分別傳回 str(a.item())
和 'array(' + repr(a.item()) + ')'
,這與 numpy 純量和更高維度的 ndarray 都不同。
現在,0d 陣列的 str
行為類似於使用 str(a[()])
的 numpy 純量,而 repr
行為類似於使用 formatter(a[()])
的更高維度陣列,其中 formatter
可以使用 np.set_printoptions
指定。np.array2string
的 style
引數已取代。
此新行為在 1.13 傳統列印模式中已停用,請參閱上方的相容性注意事項。
使用陣列為 RandomState
播種需要 1 維陣列#
RandomState
先前會接受空陣列或具有 2 個或更多維度的陣列,這會導致播種失敗(空陣列)或在設定種子時忽略某些傳遞的值。
MaskedArray
物件顯示更有用的 repr
#
MaskedArray
的 repr
現在更接近於產生它的 python 程式碼,陣列現在顯示逗號和 dtype。與其他格式變更一樣,為了幫助轉換 doctest,可以使用 1.13 傳統列印模式停用此功能。
np.polynomial
類別的 repr
更明確#
它現在顯示網域和視窗參數作為關鍵字引數,使其更清晰
>>> np.polynomial.Polynomial(range(4))
Polynomial([0., 1., 2., 3.], domain=[-1, 1], window=[-1, 1])