一、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也是一个非常有用的工具。