1. 程式人生 > 其它 >numpy中np.array()與np.asarray的區別以及.tolist

numpy中np.array()與np.asarray的區別以及.tolist

技術標籤:科學計算

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,非誠勿擾。