一、asarray和array的區別
asarray和array都是用於創建數組的函數,但它們之間還存在一些細微的差別。
首先,array可以接受任何序列對象,包括元組、列表等,而asarray則可以接受任何可迭代對象。其次,array會創造一個新的數組對象,而asarray則會儘可能地返回輸入數組的視圖(即,只會將數據轉化為數組的形式,而不會開闢新的內存空間)。這意味着,如果原數組是內存不可修改的,asarray返回的數組也會是內存不可修改的。最後,當array處理無法轉換為數組的對象時,會拋出異常,而asarray則會嘗試將輸入對象轉換成數組形式。
import numpy as np a = [1, 2, 3] arr1 = np.array(a) arr2 = np.asarray(a) print(arr1) print(arr2) a[0] = 5 print(arr1) print(arr2)
運行結果:
[1 2 3] [1 2 3] [1 2 3] [5 2 3]
從運行結果可以看出來,array創建的數組和原數組不同,asarray創建的數組和原數組相同,並且當原數組變化時,asarray創建的數組也會隨之變化。
二、asarray與vb的聯繫
asarray函數的概念和VB語言中的CVar()函數類似,函數用於將不同的變量類型轉換成數組,進而進行數值運算操作。asarray函數可以將一個Python列表或其它的序列類型轉換成NumPy數組。
import numpy as np a = [1, 2, 3] arr1 = np.asarray(a) print(type(arr1)) print(arr1.shape) print(arr1.dtype) b = 'hello world' arr2 = np.asarray(b, dtype='c') print(type(arr2)) print(arr2.shape) print(arr2.dtype)
運行結果:
(3,) int64 (11,) |S1
從上面的示例中可以看出,asarray可以將Python的字符串轉換為NumPy數組,並且可以指定數據類型。
三、array選取相關
除了可以將列表或序列轉換為NumPy數組之外,asarray函數還可以用於從現有的數組中創建新的數組。這種情況下,使用asarray的效果相當於使用array函數。比如,我們可以用asarray選取數組的某一部分,並用該部分創建一個新數組。
import numpy as np a = np.array([[1, 2], [3, 4]]) arr1 = np.asarray(a) print(type(arr1)) print(arr1) arr2 = np.asarray(a, dtype=np.float64) print(type(arr2)) print(arr2)
運行結果:
[[1 2] [3 4]] [[1. 2.] [3. 4.]]
從結果中可以看出,asarray創建的數組與原數組相同,並且也可以指定數據類型。
四、asarray作為索引數組
另一個使用asarray函數的常見情況是作為索引數組使用。我們可以將一維索引數組轉換成多維布爾數組來訪問數組中的某些元素。
import numpy as np data = np.arange(10) index = np.array([2, 1, 3, 6]) arr1 = np.asarray(data[index]) print(arr1) arr2 = np.zeros(10, dtype=bool) arr2[index] = True arr3 = data[arr2] print(arr3)
運行結果:
[2 1 3 6] [2 1 3 6]
以上示例展示了如何使用asarray將一維索引數組轉換為多維索引,並從數據中選取所需元素。
五、總結
asarray函數是NumPy庫中常用的工具之一,它可以從不同的數據源創建NumPy數組並將其視為一個NumPy數組。與array方法相比,asarray函數具有更多的優勢,例如:能夠接受可迭代對象等。在創建索引和選取元素時,asarray也是一個非常有用的工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/293064.html