numpy中np.array()與np.asarray的區別以及.tolist
阿新 • • 發佈:2021-02-09
技術標籤:科學計算
array和asarray都可以將結構資料轉化為ndarray,但是主要區別就是當資料來源是ndarray時,array仍然會copy出一個副本,佔用新的記憶體,但asarray不會。
1、輸入為列表時
a=[[1,2,3],[4,5,6],[7,8,9]]
b=np.array(a)
c=np.asarray(a)
a[2]=1
print(a)
print(b)
print(c)
從中我們可以看出np.array與np.asarray功能是一樣的,都是將輸入轉為矩陣格式。當輸入是列表的時候,更改列表的值並不會影響轉化為矩陣的值。
2、輸入為陣列時
a=np.random.random((3,3)) print(a.dtype) b=np.array(a,dtype='float64') c=np.asarray(a,dtype='float64') a[2]=2 print(a) print(b) print(c)
從上述結果我們可以看出np.array與np.asarray的區別,其在於輸入為陣列時,np.array是將輸入copy過去而np.asarray是將輸入cut過去,所以隨著輸入的改變np.array的輸出不變,而np.asarray的輸出在變化,並且當我們使用np.asarray改變其型別的時候(輸入是float64,改為float32),這樣當輸入改變的時候,np.asarray的輸出也不會改變。
3、array型別轉為list型別
a=np.random.random((3,3)) print(a.dtype) b=a.tolist() a[1]=2 print(a) print(b)
從上述我們可以看到.tolist是將陣列轉為list的格式,等同於np.array的反向,那什麼情況下需要將np.ndarray轉為list的格式呢?當需要序列化的時候(serialization),由於np.ndarray是不可序列化的。
承接Matlab、Python和C++的程式設計,機器學習、計算機視覺的理論實現及輔導,本科和碩士的均可,鹹魚交易,專業回答請走知乎,詳談請聯絡QQ號757160542,非誠勿擾。