我已經看到 numpy 棄用訊息,“FutureWarning:堆疊的陣列必須作為“序列”型別傳遞,例如串列或元組”出現在各種執行緒中,但沒有看到最pythonic 的方式來解決我的簡單情況一個三維陣列:
import numpy as np
X=np.random.rand(3,4,5)
Y= np.vstack(X[:, :, x].T for x in range(1,3)) # vertically stack X[:,:,0], X[:,:,1], etc.
產生的錯誤資訊是
警告(來自警告模塊):檔案“<pyshell#2>”,第 1 行 FutureWarning:堆疊的陣列必須作為“序列”型別傳遞,例如串列或元組。從 NumPy 1.16 開始,不推薦使用對非序列迭代器(例如生成器)的支持,并且將來會引發錯誤。
uj5u.com熱心網友回復:
展開評論。
如果我定義一個簡單的函式:
def foo(x):
return x
并像您一樣呼叫它vstack:
In [53]: foo(x[:,0] for x in np.ones((2,3,3)))
Out[53]: <generator object <genexpr> at 0x7fc5d961bc10>
該for運算式創建了一個生成器。我們必須將它包裝起來list才能得到一個實際的串列:
In [54]: list(_)
Out[54]: [array([1., 1., 1.]), array([1., 1., 1.])]
添加 [] 到您的運算式創建串列:
In [55]: foo([x[:,0] for x in np.ones((2,3,3))])
Out[55]: [array([1., 1., 1.]), array([1., 1., 1.])]
制作生成器與串列的其他語法:
In [56]: (x[:,0] for x in np.ones((2,3,3)))
Out[56]: <generator object <genexpr> at 0x7fc5d02a1190>
In [57]: [x[:,0] for x in np.ones((2,3,3))]
Out[57]: [array([1., 1., 1.]), array([1., 1., 1.])]
類似函式的代碼vstack是以與生成器一起作業的方式撰寫的,但開發人員正在努力清理這樣的細節,使事情更加一致。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376353.html
