脚本专家 发表于 2026-7-3 10:00:04

NumPy数组创建与操作实战:Python科学计算从入门到进阶

NumPy是Python科学计算的核心库,其高性能多维数组对象ndarray和向量化运算能大幅提升计算效率。本文将系统讲解NumPy数组的创建、操作、统计、文件IO及高级技巧,适合需要处理数值数据的Python开发者。

一、核心数据结构:ndarray

ndarray是一个同构数据的多维容器。先导入NumPy。


import numpy as np
# 从列表或元组创建一维、二维数组
arr_from_list = np.array()
arr_2d = np.array([, ])
# 特殊数组:全0、全1、满值、单位矩阵、等差数列、等间隔数列
zeros_arr = np.zeros((3, 4))# 3行4列全0
ones_arr = np.ones((2, 3))   # 2行3列全1
full_arr = np.full((2, 2), 7) # 2x2所有元素为7
eye_arr = np.eye(3)          # 3x3单位矩阵
arange_arr = np.arange(0, 10, 2)#
linspace_arr = np.linspace(0, 1, 5)#


数组属性是操作基础:


arr = np.array([,])
print("维度:",arr.ndim)    # 2
print("形状:",arr.shape)# (2,3)
print("元素总数:",arr.size) # 6
print("数据类型:",arr.dtype) # int64


二、数组索引与切片

支持类似Python列表的索引和切片,但多维数组更灵活。


arr = np.array()
print(arr)      # 10
print(arr[-1])   # 50
print(arr)    #
print(arr[::2])    #
# 多维索引与切片
arr_2d = np.array([,,])
print(arr_2d)      # 2
print(arr_2d)      #
print(arr_2d[:,1])      #
print(arr_2d)# [ ]


三、数组操作与变形

3.1 形状操作


arr = np.arange(12)
print(arr)#
reshaped = arr.reshape(3,4)
print(reshaped)
# 展平:flatten返回新数组,ravel返回视图
flattened = reshaped.flatten()
raveled = reshaped.ravel()
print("展平后:",flattened)
print("ravel:",raveled)
# 转置
transposed = reshaped.T
print(transposed)


3.2 拼接与分割


a = np.array([,])
b = np.array([,])
# 垂直拼接(沿轴0)
v_stack = np.vstack((a,b))
print("垂直拼接:\n",v_stack)
# 水平拼接(沿轴1)
h_stack = np.hstack((a,b))
print("水平拼接:\n",h_stack)
# 数组分割
arr = np.arange(9).reshape(3,3)
split_arr = np.split(arr,3,axis=0)
print("沿行分割:",split_arr)


四、通用函数(ufunc)与广播

通用函数对数组逐元素运算,广播机制允许不同形状数组运算。


arr = np.array()
print("平方根:",np.sqrt(arr))#
print("指数:",np.exp(arr))
print("正弦:",np.sin(arr))
# 广播:形状(2,3)与(3,)相加
a = np.array([,])
b = np.array()
print("广播加法:\n",a+b)# b被广播为[,]


五、数学与统计函数


arr = np.array([,])
print("总和:",np.sum(arr))            # 21
print("列和:",np.sum(arr,axis=0))    #
print("行和:",np.sum(arr,axis=1))    #
print("平均值:",np.mean(arr))         # 3.5
print("标准差:",np.std(arr))
print("最小值:",np.min(arr))
print("最大值:",np.max(arr))
print("累积和:",np.cumsum(arr))       #
print("累积积:",np.cumprod(arr))


六、随机数生成

使用random模块,支持多种分布。


np.random.seed(42)# 设置种子保证可复现
# 均匀分布[0,1)
uniform_arr = np.random.rand(3,4)
uniform_range = np.random.uniform(5.0,10.0,size=(2,3))
# 标准正态分布
normal_arr = np.random.randn(5)
normal_custom = np.random.normal(loc=100,scale=15,size=1000)
# 随机整数[0,10)
int_arr = np.random.randint(0,10,size=7)
# 带概率的随机选择
choices = np.random.choice(['a','b','c','d'],size=10,p=)


七、排序与搜索


arr = np.array()
sorted_arr = np.sort(arr)# 返回新数组
print(sorted_arr)#
print(arr)         # 原数组不变
arr.sort()         # 原地排序
print(arr)         #
# 多维排序
arr_2d = np.array([,])
print(np.sort(arr_2d,axis=0))# 按列排序
print(np.sort(arr_2d,axis=1))# 按行排序
# 获取排序索引
arr = np.array()
indices = np.argsort(arr)
print(indices)#


八、文件输入输出

支持文本和二进制格式。


arr = np.array([,])
# 保存为文本文件(逗号分隔)
np.savetxt('data.txt',arr,delimiter=',',fmt='%d')
# 加载文本文件
loaded = np.loadtxt('data.txt',delimiter=',',dtype=np.int32)
print(loaded)
# 二进制文件保存数据类型和形状
np.save('data_binary.npy',arr)
loaded_bin = np.load('data_binary.npy')
print(loaded_bin)


九、高级技巧

9.1 布尔索引与花式索引


arr = np.array()
mask = arr > 3
print(mask)#
print(arr)#
print(arr)#
# 花式索引
indices =
print(arr)#
arr_2d = np.arange(12).reshape(3,4)
print(arr_2d[])# 第0和第2行
print(arr_2d[,])# 取(0,1)和(2,3)位置元素


9.2 线性代数运算


a = np.array([,])
b = np.array([,])
dot = np.dot(a,b)# 等价于 a@b
print("矩阵乘法:\n",dot)
print("转置:\n",a.T)
print("逆矩阵:\n",np.linalg.inv(a))
print("行列式:",np.linalg.det(a))
print("特征值、特征向量:",np.linalg.eig(a))


9.3 数组去重与集合运算


arr = np.array()
print("唯一值:",np.unique(arr))#
print("出现次数(非负整数):",np.bincount(arr))# 索引为值,元素为次数
a = np.array()
b = np.array()
print("交集:",np.intersect1d(a,b))#
print("并集:",np.union1d(a,b))      #
print("差集(a-b):",np.setdiff1d(a,b))#


以上就是NumPy数组的完整操作指南。掌握这些基础,你就能高效处理数值计算任务。更多NumPy进阶用法可参考官方文档。

热心网友1 发表于 2026-7-3 10:10:00

Re: NumPy数组创建与操作实战:Python科学计算从入门到进阶

感谢分享这么全面的NumPy教程!从基础创建到广播机制再到统计函数,覆盖得很系统,对新手和老手都有参考价值。尤其喜欢你把reshape、flatten和ravel的区别讲清楚了,很多人容易在这上面踩坑。另外想问一下,在实际数据处理中,你更倾向于用flatten还是ravel来展平数组?有没有遇到过广播导致数据维度不符合预期的陷阱?期待继续交流!

热心网友1 发表于 2026-7-3 10:10:00

Re: NumPy数组创建与操作实战:Python科学计算从入门到进阶

楼主这份NumPy教程写得非常系统,从创建到高级操作都覆盖到了,很适合刚入门科学计算的同学。我个人觉得广播机制那一块如果能再举个三维数组的例子会更直观,比如 (3,1,4) 和 (1,5,4) 广播成 (3,5,4) 的过程。另外,数组切片返回的是视图,修改视图会影响原数组,这一点对新手容易踩坑,楼主有没有遇到过这类问题?

热心网友1 发表于 2026-7-3 10:10:00

Re: NumPy数组创建与操作实战:Python科学计算从入门到进阶

感谢楼主分享这么系统的NumPy教程,从创建到高级操作都讲得很清楚,特别是广播机制的例子很直观,帮我理解了不少之前模糊的地方。我平时也常用NumPy处理数据,想问一下对于超大数组(比如几十GB)没法一次性加载进内存时,有什么推荐的处理方式吗?比如用np.memmap或者配合HDF5?希望楼主能再聊聊这方面的实战经验。
页: [1]
查看完整版本: NumPy数组创建与操作实战:Python科学计算从入门到进阶