Python中创建NumPy数组的10种方法详解

admin 2026-07-06 09:50:15 毒圈预测

来源

代码语言:javascript复制http://news.zjdulou.com

http://play.zjdulou.com

http://vip.zjdulou.com

http://p.zjdulou.com

http://m.zjdulou.com

为什么需要NumPy数组?NumPy是Python科学计算的核心库,提供了高性能的多维数组对象和工具。相比Python原生列表,NumPy数组具有以下优势:

更快的执行速度 - 底层使用C语言实现,优化了内存使用和计算效率更少的内存占用 - 存储同类型数据,无额外类型信息开销丰富的数学函数 - 内置大量数学、统计和线性代数函数广播功能 - 支持不同形状数组之间的运算便捷的数据操作 - 支持索引、切片、变形等高级操作本文将详细介绍在Python中创建NumPy数组的10种主要方法,并提供实用示例。

1从Python列表创建 (np.array())最基础的创建方法,将Python列表或元组转换为NumPy数组。

代码语言:javascript复制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。

代码语言:javascript复制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())创建指定形状的全一数组,常用于初始化或作为计算起点。

代码语言:javascript复制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()函数,但返回的是数组,可生成等差数列。

代码语言:javascript复制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())在指定区间内创建固定数量的等间隔数值。

代码语言:javascript复制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的方阵。

代码语言:javascript复制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())创建指定形状的数组但不初始化值,内容为内存中的随机值。

代码语言:javascript复制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的随机模块创建各种分布的随机数组。

代码语言:javascript复制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())通过重复现有数组或元素来创建新数组。

代码语言:javascript复制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二进制文件加载数据创建数组。

代码语言:javascript复制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数组创建方法将为你的科学计算和数据分析工作奠定坚实基础。 根据具体需求选择合适的方法能大幅提高代码效率和可读性。