NumPy -数组创建
数组创建
目录
- 从列表创建数组
- 使用 NumPy 函数创建
- 特殊数组创建
- 从已有数据创建
- 数组数据类型
从列表创建数组
基本创建
import numpy as np# 从列表创建一维数组
list1d = [1, 2, 3, 4, 5]
arr1d = np.array(list1d)
print(f"一维数组: {arr1d}")
print(f"形状: {arr1d.shape}")# 从列表创建二维数组
list2d = [[1, 2, 3], [4, 5, 6]]
arr2d = np.array(list2d)
print(f"\n二维数组:\n{arr2d}")
print(f"形状: {arr2d.shape}")# 从列表创建三维数组
list3d = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
arr3d = np.array(list3d)
print(f"\n三维数组:\n{arr3d}")
print(f"形状: {arr3d.shape}")
指定数据类型
import numpy as np# 创建时指定数据类型
arr_int = np.array([1, 2, 3, 4], dtype=int)
arr_float = np.array([1, 2, 3, 4], dtype=float)
arr_complex = np.array([1, 2, 3, 4], dtype=complex)print(f"整数数组: {arr_int}, 类型: {arr_int.dtype}")
print(f"浮点数组: {arr_float}, 类型: {arr_float.dtype}")
print(f"复数数组: {arr_complex}, 类型: {arr_complex.dtype}")
使用 NumPy 函数创建
创建零数组
import numpy as np# 一维零数组
zeros1d = np.zeros(5)
print(f"一维零数组: {zeros1d}")# 二维零数组
zeros2d = np.zeros((3, 4))
print(f"\n二维零数组:\n{zeros2d}")# 三维零数组
zeros3d = np.zeros((2, 3, 4))
print(f"\n三维零数组形状: {zeros3d.shape}")# 指定数据类型
zeros_int = np.zeros(5, dtype=int)
print(f"\n整数零数组: {zeros_int}")
创建单位数组
import numpy as np# 一维单位数组
ones1d = np.ones(5)
print(f"一维单位数组: {ones1d}")# 二维单位数组
ones2d = np.ones((3, 4))
print(f"\n二维单位数组:\n{ones2d}")# 指定数据类型
ones_int = np.ones(5, dtype=int)
print(f"\n整数单位数组: {ones_int}")
创建空数组
import numpy as np# empty 创建未初始化的数组(值随机)
empty1d = np.empty(5)
print(f"一维空数组: {empty1d}")empty2d = np.empty((3, 4))
print(f"\n二维空数组:\n{empty2d}")
创建连续数组
import numpy as np# arange:类似 range,但返回数组
arr1 = np.arange(10)
print(f"arange(10): {arr1}")arr2 = np.arange(2, 10)
print(f"arange(2, 10): {arr2}")arr3 = np.arange(2, 10, 2)
print(f"arange(2, 10, 2): {arr3}")arr4 = np.arange(2, 10, 2, dtype=float)
print(f"arange(2, 10, 2, dtype=float): {arr4}")
创建等间隔数组
import numpy as np# linspace:创建等间隔的数组
arr1 = np.linspace(0, 10, 5)
print(f"linspace(0, 10, 5): {arr1}")arr2 = np.linspace(0, 10, 5, endpoint=False)
print(f"linspace(0, 10, 5, endpoint=False): {arr2}")# 对数和指数空间
arr3 = np.logspace(0, 2, 5)
print(f"logspace(0, 2, 5): {arr3}")arr4 = np.geomspace(1, 1000, 4)
print(f"geomspace(1, 1000, 4): {arr4}")
特殊数组创建
创建单位矩阵
import numpy as np# 2x2 单位矩阵
I2 = np.eye(2)
print(f"2x2 单位矩阵:\n{I2}")# 3x3 单位矩阵
I3 = np.eye(3)
print(f"\n3x3 单位矩阵:\n{I3}")# 指定对角线偏移
I_offset = np.eye(4, k=1)
print(f"\n对角线偏移的单位矩阵:\n{I_offset}")
创建对角矩阵
import numpy as np# 从一维数组创建对角矩阵
diag1 = np.diag([1, 2, 3, 4])
print(f"对角矩阵:\n{diag1}")# 提取对角线元素
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
diag_elements = np.diag(arr)
print(f"\n原数组:\n{arr}")
print(f"对角线元素: {diag_elements}")
创建全值数组
import numpy as np# 创建全为指定值的数组
full1d = np.full(5, 7)
print(f"全为 7 的一维数组: {full1d}")full2d = np.full((3, 4), 7)
print(f"\n全为 7 的二维数组:\n{full2d}")# 指定数据类型
full_float = np.full(5, 7, dtype=float)
print(f"\n全为 7 的浮点数组: {full_float}")
从已有数据创建
复制数组
import numpy as nporiginal = np.array([1, 2, 3, 4, 5])# copy 创建副本
copied = np.copy(original)
print(f"原数组: {original}")
print(f"副本: {copied}")# 修改副本不影响原数组
copied[0] = 999
print(f"\n修改副本后:")
print(f"原数组: {original}")
print(f"副本: {copied}")
从现有数组创建
import numpy as nparr = np.array([1, 2, 3, 4, 5])# empty_like:创建相同形状的空数组
empty_like = np.empty_like(arr)
print(f"empty_like: {empty_like}")# zeros_like:创建相同形状的零数组
zeros_like = np.zeros_like(arr)
print(f"zeros_like: {zeros_like}")# ones_like:创建相同形状的单位数组
ones_like = np.ones_like(arr)
print(f"ones_like: {ones_like}")# full_like:创建相同形状的全值数组
full_like = np.full_like(arr, 7)
print(f"full_like: {full_like}")
数组数据类型
常见数据类型
import numpy as np# 整数类型
arr_int8 = np.array([1, 2, 3], dtype=np.int8)
arr_int16 = np.array([1, 2, 3], dtype=np.int16)
arr_int32 = np.array([1, 2, 3], dtype=np.int32)
arr_int64 = np.array([1, 2, 3], dtype=np.int64)print(f"int8: {arr_int8.dtype}")
print(f"int16: {arr_int16.dtype}")
print(f"int32: {arr_int32.dtype}")
print(f"int64: {arr_int64.dtype}")# 浮点类型
arr_float32 = np.array([1.5, 2.5, 3.5], dtype=np.float32)
arr_float64 = np.array([1.5, 2.5, 3.5], dtype=np.float64)print(f"\nfloat32: {arr_float32.dtype}")
print(f"float64: {arr_float64.dtype}")# 复数类型
arr_complex64 = np.array([1+2j, 3+4j], dtype=np.complex64)
arr_complex128 = np.array([1+2j, 3+4j], dtype=np.complex128)print(f"\ncomplex64: {arr_complex64.dtype}")
print(f"complex128: {arr_complex128.dtype}")# 布尔类型
arr_bool = np.array([True, False, True], dtype=bool)
print(f"\nbool: {arr_bool.dtype}")# 字符串类型
arr_str = np.array(['a', 'bb', 'ccc'], dtype='U10')
print(f"\nstring: {arr_str.dtype}")
类型转换
import numpy as np# 创建数组
arr = np.array([1, 2, 3, 4, 5])
print(f"原始数组: {arr}, 类型: {arr.dtype}")# 使用 astype 转换类型
arr_float = arr.astype(float)
print(f"转换为浮点: {arr_float}, 类型: {arr_float.dtype}")arr_complex = arr.astype(complex)
print(f"转换为复数: {arr_complex}, 类型: {arr_complex.dtype}")# 字符串数组转数值
arr_str = np.array(['1', '2', '3', '4', '5'])
arr_int = arr_str.astype(int)
print(f"\n字符串数组: {arr_str}")
print(f"转换为整数: {arr_int}, 类型: {arr_int.dtype}")
实际应用示例
示例 1:创建网格
import numpy as np# 创建坐标网格
x = np.linspace(0, 10, 11)
y = np.linspace(0, 10, 11)
X, Y = np.meshgrid(x, y)print(f"X 网格形状: {X.shape}")
print(f"Y 网格形状: {Y.shape}")
print(f"\nX 网格:\n{X}")
print(f"\nY 网格:\n{Y}")# 计算网格上的函数值
Z = np.sqrt(X**2 + Y**2)
print(f"\n函数值 Z:\n{Z}")
示例 2:创建随机数组
import numpy as np# 随机整数数组
random_int = np.random.randint(0, 10, size=(3, 4))
print(f"随机整数数组:\n{random_int}")# 随机浮点数组(0-1之间)
random_float = np.random.random((3, 4))
print(f"\n随机浮点数组:\n{random_float}")# 正态分布随机数组
random_normal = np.random.normal(0, 1, size=(3, 4))
print(f"\n正态分布随机数组:\n{random_normal}")
总结
数组创建是 NumPy 的基础:
- 从列表创建:np.array()
- 零数组:np.zeros()
- 单位数组:np.ones()
- 连续数组:np.arange(), np.linspace()
- 特殊数组:np.eye(), np.diag(), np.full()
- 类型控制:dtype 参数和 astype() 方法
