Python中创建NumPy数组的10种方法详解 | 科学计算入门
- Python
- 2025-08-08
- 36
Python中创建NumPy数组的10种方法
科学计算与数据分析的基础操作详解
P
Python数据分析师
最后更新: 2023年10月15日 | 阅读时间: 8分钟
为什么需要NumPy数组?
NumPy是Python科学计算的核心库,提供了高性能的多维数组对象和工具。相比Python原生列表,NumPy数组具有以下优势:
- 更快的执行速度 - 底层使用C语言实现,优化了内存使用和计算效率
- 更少的内存占用 - 存储同类型数据,无额外类型信息开销
- 丰富的数学函数 - 内置大量数学、统计和线性代数函数
- 广播功能 - 支持不同形状数组之间的运算
- 便捷的数据操作 - 支持索引、切片、变形等高级操作
本文将详细介绍在Python中创建NumPy数组的10种主要方法,并提供实用示例。
1 从Python列表创建 (np.array())
最基础的创建方法,将Python列表或元组转换为NumPy数组。
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # 输出: [1 2 3 4 5]
# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]]
# 指定数据类型
arr3 = np.array([1.5, 2.8, 3.2], dtype=np.int32)
print(arr3) # 输出: [1 2 3]
2 创建全零数组 (np.zeros())
创建指定形状的全零数组,默认数据类型为float64。
import numpy as np
# 创建一维全零数组
zeros_1d = np.zeros(5)
print(zeros_1d) # 输出: [0. 0. 0. 0. 0.]
# 创建二维全零数组 (3行4列)
zeros_2d = np.zeros((3, 4))
print(zeros_2d)
# 输出:
# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]
# 指定数据类型
zeros_int = np.zeros((2, 3), dtype=np.int32)
print(zeros_int)
# 输出:
# [[0 0 0]
# [0 0 0]]
3 创建全一数组 (np.ones())
创建指定形状的全一数组,常用于初始化或作为计算起点。
import numpy as np
# 创建一维全一数组
ones_1d = np.ones(4)
print(ones_1d) # 输出: [1. 1. 1. 1.]
# 创建三维全一数组 (2x3x4)
ones_3d = np.ones((2, 3, 4))
print(ones_3d.shape) # 输出: (2, 3, 4)
# 指定数据类型
ones_bool = np.ones((2, 2), dtype=bool)
print(ones_bool)
# 输出:
# [[ True True]
# [ True True]]
4 创建数值范围数组 (np.arange())
类似Python的range()函数,但返回的是数组,可生成等差数列。
import numpy as np
# 从0到9的整数
arr1 = np.arange(10)
print(arr1) # 输出: [0 1 2 3 4 5 6 7 8 9]
# 指定起始值和结束值 (5到14)
arr2 = np.arange(5, 15)
print(arr2) # 输出: [ 5 6 7 8 9 10 11 12 13 14]
# 指定步长 (0到30,步长为3)
arr3 = np.arange(0, 30, 3)
print(arr3) # 输出: [ 0 3 6 9 12 15 18 21 24 27]
# 创建浮点数序列
arr4 = np.arange(0, 2.5, 0.5)
print(arr4) # 输出: [0. 0.5 1. 1.5 2. ]
5 创建等间隔数组 (np.linspace())
在指定区间内创建固定数量的等间隔数值。
import numpy as np
# 0到10之间生成5个等间隔数
arr1 = np.linspace(0, 10, 5)
print(arr1) # 输出: [ 0. 2.5 5. 7.5 10. ]
# 包含端点 (默认包含)
arr2 = np.linspace(0, 1, 10)
print(arr2)
# 输出: [0. 0.11111111 0.22222222 0.33333333 0.44444444
# 0.55555556 0.66666667 0.77777778 0.88888889 1. ]
# 不包含端点
arr3 = np.linspace(0, 1, 10, endpoint=False)
print(arr3)
# 输出: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
6 创建单位矩阵 (np.eye() / np.identity())
创建主对角线为1,其余位置为0的方阵。
import numpy as np
# 3x3单位矩阵
identity_matrix = np.eye(3)
print(identity_matrix)
# 输出:
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
# 使用np.identity()
identity_matrix2 = np.identity(4)
print(identity_matrix2)
# 输出:
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]
# [0. 0. 0. 1.]]
# 非方阵的对角矩阵
rectangular_eye = np.eye(3, 4)
print(rectangular_eye)
# 输出:
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]]
7 创建未初始化数组 (np.empty())
创建指定形状的数组但不初始化值,内容为内存中的随机值。
import numpy as np
# 创建2x3未初始化数组
empty_arr = np.empty((2, 3))
print(empty_arr)
# 输出内容随机,例如:
# [[1.39069238e-309 1.39069238e-309 1.39069238e-309]
# [1.39069238e-309 1.39069238e-309 1.39069238e-309]]
# 创建一维未初始化数组
empty_1d = np.empty(5)
print(empty_1d) # 输出: [随机值]
注意: np.empty()创建的是未初始化的数组,其内容取决于内存的当前状态。 只应在确定后续会填充所有值的情况下使用,以提高性能。
8 创建随机数组 (np.random)
使用NumPy的随机模块创建各种分布的随机数组。
import numpy as np
# 创建0到1之间的随机数数组 (3x3)
rand_arr = np.random.rand(3, 3)
print(rand_arr)
# 输出示例:
# [[0.5488135 0.71518937 0.60276338]
# [0.54488318 0.4236548 0.64589411]
# [0.43758721 0.891773 0.96366276]]
# 创建标准正态分布随机数组 (均值为0,标准差为1)
randn_arr = np.random.randn(2, 4)
print(randn_arr)
# 输出示例:
# [[ 0.95008842 -0.15135721 -0.10321885 0.4105985 ]
# [ 0.14404357 1.45427351 0.76103773 0.12167502]]
# 创建指定范围内的随机整数
randint_arr = np.random.randint(10, 30, size=(3, 2))
print(randint_arr)
# 输出示例:
# [[20 29]
# [24 22]
# [27 19]]
9 创建重复元素的数组 (np.repeat() / np.tile())
通过重复现有数组或元素来创建新数组。
import numpy as np
# 重复每个元素指定次数
arr = np.array([1, 2, 3])
repeated = np.repeat(arr, 3)
print(repeated) # 输出: [1 1 1 2 2 2 3 3 3]
# 重复整个数组
tiled = np.tile(arr, 3)
print(tiled) # 输出: [1 2 3 1 2 3 1 2 3]
# 二维重复
arr_2d = np.array([[1, 2], [3, 4]])
repeated_2d = np.repeat(arr_2d, 2, axis=1) # 沿列方向重复
print(repeated_2d)
# 输出:
# [[1 1 2 2]
# [3 3 4 4]]
# 平铺二维数组
tiled_2d = np.tile(arr_2d, (2, 1)) # 行方向重复2次,列方向1次
print(tiled_2d)
# 输出:
# [[1 2]
# [3 4]
# [1 2]
# [3 4]]
10 从文件加载数据
从文本文件、CSV文件或NumPy二进制文件加载数据创建数组。
import numpy as np
# 从文本文件加载
# 假设data.txt内容:
# 1 2 3
# 4 5 6
data = np.loadtxt('data.txt')
print(data)
# 输出:
# [[1. 2. 3.]
# [4. 5. 6.]]
# 从CSV文件加载 (逗号分隔)
# 假设data.csv内容:
# 1.5,2.3,3.7
# 4.1,5.8,6.2
csv_data = np.genfromtxt('data.csv', delimiter=',')
print(csv_data)
# 输出:
# [[1.5 2.3 3.7]
# [4.1 5.8 6.2]]
# 保存和加载NumPy二进制文件 (.npy)
arr = np.array([[10, 20], [30, 40]])
np.save('my_array.npy', arr)
loaded_arr = np.load('my_array.npy')
print(loaded_arr)
# 输出:
# [[10 20]
# [30 40]]
方法选择指南
基础创建
- 从现有数据 → np.array()
- 全零数组 → np.zeros()
- 全一数组 → np.ones()
序列生成
- 整数序列 → np.arange()
- 等分数列 → np.linspace()
- 重复元素 → np.repeat()/tile()
特殊矩阵
- 单位矩阵 → np.eye()
- 随机矩阵 → np.random
- 未初始化 → np.empty()
掌握这些NumPy数组创建方法将为你的科学计算和数据分析工作奠定坚实基础。 根据具体需求选择合适的方法能大幅提高代码效率和可读性。
本文由JiShi于2025-08-08发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257605.html
发表评论