numpy.asarray 函数用于将输入转换为数组。与 numpy.array 不同的是,如果输入已经是一个数组,numpy.asarray 不会创建副本,而是直接返回输入的数组。使得它在处理大型数据时更高效。本文主要介绍一下NumPy中asarray方法的使用。

numpy.asarray

numpy.asarray(a, dtype=None, order=None) [source]

将输入转换为数组。

参数

a :array_like

输入数据,可以转换为数组的任何形式。

这包括列表,元组列表,元组,元组元组,

列表元组和ndarray。

dtype :data-type, 可选

默认情况下,data-type是从输入数据推断出来的。

order{‘C’, ‘F’}, 可选

是使用行-主格式(C-style)还是列-主格式(Fortran-style)内存表示。

默认为'C'

返回值

outndarray

如果输入已经是dtype和order匹配的ndarray,

则不执行复制。如果a是ndarray的子类,

则返回一个基类ndarray。

例子

1)从列表转换为数组

import numpy as np

# 输入列表
list_data = [1, 2, 3, 4, 5]

# 使用 numpy.asarray 转换为数组
array_data = np.asarray(list_data)

print("List:", list_data)
print("Array:", array_data)

2)从元组转换为数组,并指定数据类型

import numpy as np

# 输入元组
tuple_data = (1, 2, 3, 4, 5)

# 使用 numpy.asarray 转换为数组,并指定数据类型为 float
array_data = np.asarray(tuple_data, dtype=float)

print("Tuple:", tuple_data)
print("Array:", array_data)

3)处理多维数据

import numpy as np

# 输入多维列表
multi_dim_list = [[1, 2, 3], [4, 5, 6]]

# 使用 numpy.asarray 转换为多维数组
array_data = np.asarray(multi_dim_list)

print("Multi-dimensional List:", multi_dim_list)
print("Multi-dimensional Array:")
print(array_data)

4)不创建副本

import numpy as np

# 输入已经是一个数组
existing_array = np.array([1, 2, 3, 4, 5])

# 使用 numpy.asarray 转换,不创建副本
array_data = np.asarray(existing_array)

print("Existing Array:", existing_array)
print("Array Data (No Copy):", array_data)

# 修改原数组,看看 array_data 是否也会改变
existing_array[0] = 10
print("Modified Existing Array:", existing_array)
print("Array Data After Modification (No Copy):", array_data)

5)指定存储顺序

import numpy as np

# 输入多维列表
multi_dim_list = [[1, 2, 3], [4, 5, 6]]

# 使用 numpy.asarray 转换为 Fortran 风格的多维数组
array_data_F = np.asarray(multi_dim_list, order='F')

print("Multi-dimensional List:", multi_dim_list)
print("Array with Fortran-style order:")
print(array_data_F)

6)使用示例

import numpy as np

# 1. 将列表转换为数组
a = [1, 2]
array_a = np.asarray(a)
print("列表:", a)
print("数组:", array_a)

# 2. 现有数组未复制
a = np.array([1, 2])
array_a = np.asarray(a)
print("\n原数组:", a)
print("新数组:", array_a)
print("是否为同一对象:", array_a is a)

# 3. 根据 dtype 设置进行条件复制
a = np.array([1, 2], dtype=np.float32)
array_a_float32 = np.asarray(a, dtype=np.float32)
array_a_float64 = np.asarray(a, dtype=np.float64)
print("\n原数组:", a)
print("新数组 (float32):", array_a_float32)
print("是否为同一对象 (float32):", array_a_float32 is a)
print("新数组 (float64):", array_a_float64)
print("是否为同一对象 (float64):", array_a_float64 is a)

# 4. ndarray 子类未传递
is_subclass = issubclass(np.recarray, np.ndarray)
print("\nnp.recarray 是 np.ndarray 的子类:", is_subclass)

a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
array_a = np.asarray(a)
array_a_any = np.asanyarray(a)
print("原 recarray:", a)
print("使用 np.asarray:", array_a)
print("是否为同一对象 (np.asarray):", array_a is a)
print("使用 np.asanyarray:", array_a_any)
print("是否为同一对象 (np.asanyarray):", array_a_any is a)

推荐文档

相关文档

大家感兴趣的内容

随机列表