一、類型轉換
np.asarray是numpy中一個重要的函數,在科學計算領域被廣泛使用。它的主要作用是將輸入數據轉換為ndarray數組類型。當輸入數據為ndarray類型時,np.asarray()不會造成任何數據複製,但對於其他的數據類型,np.asarray()會新創建一個新的ndarray。
通過np.asarray(),我們可以將list、tuple等數據類型轉化為ndarray數組類型。
import numpy as np lst = [1, 2, 3] arr = np.array(lst) as_arr = np.asarray(lst) print(arr is as_arr) # True
當我們將list轉換為ndarray類型時,會發現如果直接使用np.array()和np.asarray(),輸出數組的類型是一樣的。但是,np.array()每次都會複製一份數據,而np.asarray()則不會造成數據的浪費,這在數據量大時非常重要。
二、廣播機制
在ndarray中,廣播機制能夠幫助我們在對形狀不同的數組進行操作時,自動轉化成統一的形狀進行計算。np.asarray()函數的一個重要用途就是廣播機制。
import numpy as np a = np.arange(3) b = 1 c = np.asarray(a) + b print(c)
在上面的代碼中,我們將一個形狀為(3,)的ndarray和一個標量相加,由於標量的形狀為(),與ndarray可進行廣播,廣播後得到的結果為一個大小也為(3,)的ndarray。
三、深拷貝
當我們需要對一個ndarray進行深拷貝時,可以使用np.asarray()函數進行實現。
import numpy as np a = np.array([1, 2, 3]) b = np.asarray(a, dtype='float64') c = np.copy(a) a[0] = 10 print(a) # [10 2 3] print(b) # [10. 2. 3.] print(c) # [1 2 3]
在上面的代碼中,我們使用np.asarray()函數將一個整型的ndarray轉換為浮點型的ndarray,且複製了一份新的數組b。此時,a數組的第一個元素被修改成了10,但是複製出的b數組中的第一個元素沒有發生改變。而c數組是直接複製的a數組,當a數組的元素髮生改變時,c數組也會發生相應變化。
四、快速創建ndarray
np.asarray()函數還可以用於快速創建ndarray,和np.zeros()、np.ones()等函數類似。
import numpy as np a = np.asarray([1, 2, 3]) b = np.asarray((1, 2, 3)) c = np.asarray('hello world') print(a) # [1 2 3] print(b) # [1 2 3] print(c) # 'hello world'
在上面的代碼中,我們用np.asarray()函數快速創建ndarray,分別用list、tuple和字元串作為參數。注意,當輸入字元串時,np.asarray()會把每一個字元分割開成單個元素,而不是一個字元串元素。
五、應用於自定義數據類型
當我們需要對自定義的數據類型進行操作時,np.asarray()也是一個非常有效的函數。
import numpy as np dt = np.dtype([('name', 'S10'), ('age', np.int)]) people_info = [('Mike', 18), ('Emma', 20), ('Will', 25)] people = np.asarray(people_info, dtype=dt) print(people['name']) # [b'Mike' b'Emma' b'Will'] print(people['age']) # [18 20 25]
在上面的代碼中,我們定義了一個叫做dt的自定義數據類型,包含兩個欄位:name和age。接著,我們輸入了三個人的信息,每個人有姓名和年齡兩個屬性,然後通過np.asarray()函數將這些人的信息轉換為ndarray類型。最後,我們可以用對應的欄位名提取出姓名和年齡分別作為一個數組。
原創文章,作者:OOFI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149334.html