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


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

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的輸出在變化,

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

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是不可序列化的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM