從多個方面詳述np.asarray

一、類型轉換

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OOFI的頭像OOFI
上一篇 2024-11-04 17:50
下一篇 2024-11-04 17:50

相關推薦

發表回復

登錄後才能評論