np.asarray()
函数
np.asarray()
函数用于将输入数据转换为 NumPy 数组(ndarray),但不会复制数据(如果数据已经是 NumPy 数组),这与 np.array()
的行为不同。
1. np.asarray()
语法
numpy.asarray(a, dtype=None, order=None)
a
:要转换的输入数据(可以是列表、元组、NumPy 数组等)。dtype
:(可选)指定数组的数据类型,如int32
、float64
等。order
:(可选)‘C’(C 语言风格,行优先存储),‘F’(Fortran 风格,列优先存储)。
2. np.asarray()
与 np.array()
的区别
函数 | 是否复制数据 | 适用场景 |
---|---|---|
np.array() | 始终创建新数组(复制数据) | 适用于创建数组的所有情况 |
np.asarray() | 不会复制已存在的 NumPy 数组 | 适用于避免不必要的数据复制,提高性能 |
3. 示例
3.1 将列表转换为 NumPy 数组
import numpy as np
lst = [1, 2, 3]
arr = np.asarray(lst)
print(arr)
print(type(arr)) # <class 'numpy.ndarray'>
3.2 传入 NumPy 数组
如果 a
已经是 NumPy 数组,则 np.asarray(a)
直接返回原数组,不进行复制:
arr = np.array([1, 2, 3])
arr2 = np.asarray(arr)
print(arr is arr2) # True(没有创建新数组)
3.3 传入元组
tup = (4, 5, 6)
arr = np.asarray(tup)
print(arr) # [4 5 6]
3.4 传入嵌套列表(多维数组)
nested_list = [[1, 2, 3], [4, 5, 6]]
arr = np.asarray(nested_list)
print(arr)
输出:
[[1 2 3]
[4 5 6]]
3.5 指定数据类型
arr = np.asarray([1, 2, 3], dtype=np.float64)
print(arr) # [1. 2. 3.]
3.6 order
参数
arr_C = np.asarray([[1, 2], [3, 4]], order='C') # C 风格(行优先存储)
arr_F = np.asarray([[1, 2], [3, 4]], order='F') # Fortran 风格(列优先存储)
4. np.asarray()
适用场景
- 避免不必要的数据复制(如在大规模数据处理中,直接使用
asarray()
提高效率)。 - 保证输入是 NumPy 数组(比如在函数中需要操作 NumPy 数组时)。
- 转换其他数据结构(如列表、元组)为 NumPy 数组。
总结
np.asarray()
不会复制已是 NumPy 数组的输入,而np.array()
总是创建新数组。- 适用于 高效数据转换,特别是在处理大规模数据时 减少不必要的内存开销。
- 允许 指定数据类型 和 存储方式(行优先/列优先)。