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

  array 和 asarray 均可以將 結構數據 轉化爲 ndarray,可是主要區別就是當數據源是ndarray時,array仍然會copy出一個副本,佔用新的內存,但asarray不會。html

1.輸入爲列表時

import numpy as np 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) """ 運行結果: [[1, 2, 3], [4, 5, 6], 1] [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]] """

  從中咱們能夠看出np.array與np.asarray功能是同樣的,都是將輸入轉爲矩陣格式。當輸入是列表的時候,更改列表的值並不會影響轉化爲矩陣的值。數組

2.輸入爲數組時

import numpy as np 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) """ 運行結果: float64 [[0.11294711 0.0957448 0.78717227] [0.69908742 0.78219365 0.34341174] [2. 2. 2. ]] [[0.11294711 0.0957448 0.78717227] [0.69908742 0.78219365 0.34341174] [0.82900099 0.68317933 0.99346798]] [[0.11294711 0.0957448 0.78717227] [0.69908742 0.78219365 0.34341174] [2. 2. 2. ]] """

  從上述結果咱們能夠看出np.array與np.asarray的區別,其在於輸入爲數組時,np.array是將輸入copy過去而np.asarray是將輸入cut過去,因此隨着輸入的改變np.array的輸出不變,而np.asarray的輸出在變化,dom

  !!!而且當咱們使用np.asarray改變其類型的時候(輸入是float64,改成float32),這樣當輸入改變的時候,np.asarray的輸出也不會改變。spa

3.array類型轉爲list類型

import numpy as np a=np.random.random((3,3)).round(2) print(a.dtype) print(a) b=a.tolist() print("---"*20) a[1]=2
print(a) print(b) """ 運行結果: float64 [[0.29 0.89 0.93] [0.83 0.88 0.49] [0.21 0.48 0.5 ]] ------------------------------------------------------------ [[0.29 0.89 0.93] [2. 2. 2. ] [0.21 0.48 0.5 ]] [[0.29, 0.89, 0.93], [0.83, 0.88, 0.49], [0.21, 0.48, 0.5]] """

  從上述咱們能夠看到.tolist是將數組轉爲list的格式,等同於np.array的反向,那什麼狀況下須要將np.ndarray轉爲list的格式呢?當須要序列化的時候(serialization),因爲np.ndarray是不可序列化的。code

相關文章
相關標籤/搜索