一、类型转换
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类型。最后,我们可以用对应的字段名提取出姓名和年龄分别作为一个数组。