当前位置: 首页 > news >正文

Python NumPy入门指南:数据处理科学计算的瑞士军刀

作者:唐叔在学习
专栏:唐叔学python
标签:Python NumPy、数据分析、科学计算、机器学习基础、数组操作、Python数据处理、人工智能基础、Python编程

摘要

NumPy是Python科学计算的基础库,提供了高性能的多维数组对象和工具。本文唐叔将带你从零开始了解NumPy的核心概念、常用操作和实际应用场景,助你在数据分析、机器学习等领域快速上手。无论你是Python初学者还是想提升数据处理能力,这篇文章都将成为你的实用指南。

文章目录

    • 摘要
    • 一、NumPy是什么?为什么它如此重要?
    • 二、NumPy安装与基础使用
      • 2.1 安装NumPy
      • 2.2 导入NumPy
      • 2.3 创建第一个NumPy数组
    • 三、NumPy核心功能详解
      • 3.1 数组属性
      • 3.2 创建特殊数组
      • 3.3 数组索引与切片
      • 3.4 数组运算
      • 3.5 广播机制
    • 四、NumPy高级功能
      • 4.1 数组变形
      • 4.2 数组拼接与分割
      • 4.3 统计函数
    • 五、NumPy在实际项目中的应用
      • 5.1 图像处理
      • 5.2 机器学习数据预处理
      • 5.3 数值计算
    • 六、NumPy性能优化技巧
    • 七、总结


一、NumPy是什么?为什么它如此重要?

各位小伙伴们好,我是唐叔!今天我们要聊的是Python科学计算领域的一个重量级选手——NumPy。

简单来说,NumPy(Numerical Python)是Python中用于科学计算的基础包。它提供了一个强大的N维数组对象,以及用于处理这些数组的各种工具。可以说,NumPy是Python数据科学生态系统的基石,几乎所有的机器学习框架(如TensorFlow、PyTorch)和数据分析库(如Pandas)都建立在NumPy之上。

为什么NumPy这么受欢迎?主要有三大原因:

  1. 性能强大:NumPy的底层是用C语言编写的,运算速度比纯Python快几个数量级
  2. 接口简单:提供了大量简洁高效的数组操作函数
  3. 生态完善:与SciPy、Matplotlib、Pandas等库完美配合

二、NumPy安装与基础使用

2.1 安装NumPy

安装NumPy非常简单,使用pip命令即可:

pip install numpy

如果你使用的是Anaconda,它已经自带了NumPy,无需额外安装。

2.2 导入NumPy

按照惯例,我们通常这样导入NumPy:

import numpy as np

这样我们就可以用np作为前缀来调用NumPy的各种功能了。

2.3 创建第一个NumPy数组

让我们创建一个简单的数组来感受一下:

import numpy as np# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)

输出结果:

[1 2 3 4 5]
[[1 2 3][4 5 6]]

三、NumPy核心功能详解

3.1 数组属性

每个NumPy数组都有一些重要的属性:

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

3.2 创建特殊数组

NumPy提供了多种创建特殊数组的方法:

# 创建全零数组
zeros = np.zeros((2, 3))# 创建全1数组
ones = np.ones((3, 2))# 创建单位矩阵
eye = np.eye(3)# 创建等差数列
lin = np.linspace(0, 10, 5)  # [ 0.   2.5  5.   7.5 10. ]# 创建随机数组
rand = np.random.rand(2, 2)

在这里插入图片描述

3.3 数组索引与切片

NumPy的索引和切片操作是数据处理的核心:

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 获取单个元素
print(arr[1, 2])  # 6# 获取一行
print(arr[1])  # [4 5 6]# 获取一列
print(arr[:, 1])  # [2 5 8]# 切片
print(arr[0:2, 1:3])
"""
[[2 3][5 6]]
"""

3.4 数组运算

NumPy支持各种数学运算:

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 加法
print(a + b)  # [5 7 9]# 乘法(元素级)
print(a * b)  # [4 10 18]# 点积
print(np.dot(a, b))  # 32# 平方
print(a**2)  # [1 4 9]# 平方根
print(np.sqrt(4))  # 2.0# 求和
print(a.sum())  # 6.0# 均值
print(a.mean())  # 2.0# 三角函数
print(np.sin(a))

常见的数组运算见下表:

运算符号 / 函数例子
逐元素加+a + b
逐元素乘*a * b
矩阵乘@np.dota @ b.T
平方根np.sqrt(a)逐元素
求和a.sum()a.sum(axis=0)按列求和
均值a.mean()

3.5 广播机制

NumPy的广播机制是其强大功能之一:

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])# b会被广播到与a相同的形状
print(a + b)
"""
[[11 22 33][14 25 36]]
"""

四、NumPy高级功能

4.1 数组变形

arr = np.arange(6)  # [0 1 2 3 4 5]# 改变形状
print(arr.reshape(2, 3))
"""
[[0 1 2][3 4 5]]
"""# 展平数组
print(arr.flatten())  # [0 1 2 3 4 5]

4.2 数组拼接与分割

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 垂直拼接
print(np.vstack((a, b)))
"""
[[1 2][3 4][5 6]]
"""# 水平拼接
c = np.array([[7], [8]])
print(np.hstack((a, c)))
"""
[[1 2 7][3 4 8]]
"""# 数组分割
arr = np.arange(9).reshape(3, 3)
print(np.hsplit(arr, 3))  # 分成3个数组

4.3 统计函数

NumPy提供了丰富的统计函数:

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print("平均值:", np.mean(data))
print("中位数:", np.median(data))
print("标准差:", np.std(data))
print("最大值:", np.max(data))
print("最小值:", np.min(data))
print("每列的和:", np.sum(data, axis=0))
print("每行的和:", np.sum(data, axis=1))

在这里插入图片描述

五、NumPy在实际项目中的应用

NumPy 在实际项目中,由于其内置的大量函数,使其在图像处理、机器学习数据预处理、数据计算处理等场景都有广泛使用。可以不夸张的说:搞AI、搞数据,NumPy是地基!

5.1 图像处理

NumPy数组可以用来表示图像:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np# 读取图像为NumPy数组
img = np.array(Image.open('image.png'))# # 显示图像
# plt.imshow(img)
# plt.show()
#
# # 转换为灰度图
# gray = np.mean(img, axis=2)
# plt.imshow(gray, cmap='gray')
# plt.show()fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img)
gray = np.mean(img, axis=2)
ax2.imshow(gray, cmap='gray')
plt.show()

在这里插入图片描述

5.2 机器学习数据预处理

# 特征标准化
data = np.random.rand(100, 5)  # 100个样本,5个特征# 计算均值和标准差
mean = np.mean(data, axis=0)
std = np.std(data, axis=0)# 标准化
normalized = (data - mean) / std# 打乱数据顺序
np.random.shuffle(normalized)

5.3 数值计算

# 解线性方程组
A = np.array([[2, 1], [1, 3]])
b = np.array([4, 5])
x = np.linalg.solve(A, b)  # [1.4, 1.2]# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
'''
[[-0.85065081 -0.52573111][ 0.52573111 -0.85065081]]
'''

六、NumPy性能优化技巧

  1. 避免循环:尽量使用NumPy内置函数代替Python循环
  2. 使用视图而非副本:切片操作返回的是视图,不会复制数据
  3. 预分配内存:对于大型数组,先创建好再填充
  4. 使用适当的数据类型:如np.float32np.float64节省内存
import time
import numpy as npn = 1_000_000# 不好的做法
start = time.time()
result = []
for i in range(n):result.append(i**2)
result = np.array(result)
print("it cost: {}".format(time.time() - start))# 好的做法
start = time.time()
result = np.arange(n)**2time.time()
result = np.arange(n)**2
print("it cost: {}".format(time.time() - start))

在这里插入图片描述

七、总结

NumPy作为Python科学计算的基石,提供了:

  1. 高效的多维数组对象
  2. 丰富的数学函数库
  3. 强大的广播机制
  4. 便捷的线性代数运算
  5. 与其它科学计算库的良好兼容性

掌握了NumPy,你就打开了Python数据科学的大门。无论是数据分析、机器学习还是科学计算,NumPy都是不可或缺的工具。希望这篇文章能帮助你快速上手NumPy,在数据处理的道路上越走越远!

最后提醒:学习NumPy最好的方式就是多练习!打开你的Python环境,跟着示例代码敲一遍,感受NumPy的强大魅力吧!


觉得有用的话,别忘了点赞收藏加关注!

往期文章推荐:

  • Pandas - Python爬虫数据处理分析神器
  • Pandas - JSON格式数据操作实践
  • Matplotlib - Python图表可视化利器
http://www.dtcms.com/a/322756.html

相关文章:

  • Redis缓存详解:内存淘汰和缓存的预热、击穿、雪崩、穿透的原理与策略
  • 深入理解C++多态:从概念到实现
  • AudioLLM
  • 人工智能-python-特征选择-皮尔逊相关系数
  • 第15届蓝桥杯Scratch选拔赛初级及中级(STEMA)2023年12月17日真题
  • Python爬虫实战:构建国际营养数据采集系统
  • 非常简单!从零学习如何免费制作一个lofi视频
  • 【GitHub小娱乐】GitHub个人主页ProFile美化
  • 怎么选择和怎么填写域名解析到 阿里云ECS
  • 【Redis】Redis-plus-plus的安装与使用
  • 【pyqt5】SP_(Standard Pixmap)的标准图标常量及其对应的图标
  • elementui cascader 远程加载请求使用 选择单项等
  • AcWing 4579. 相遇问题
  • 生物多样性智慧化监测平台
  • 麒麟linux服务器搭建ftp服务【经典版】
  • 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕
  • 量化投资初探:搭建比特币智能交易机器人
  • 当AI成为语言桥梁:Seq2Seq的机器翻译革命
  • [CUDA] CUTLASS | `CuTe DSL` 创新
  • C# 使用iText获取PDF的trailer数据
  • 基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
  • Baumer高防护相机如何通过YoloV8深度学习模型实现输电线路塔电缆检测分割(C#代码UI界面版)
  • 《Resolving tissue complexity by multimodal spatial omics modeling with MISO》
  • Python人工智能matplotlib中markers属性介绍
  • 【高等数学】第八章 向量代数与空间解析几何——第四节 空间直线及其方程
  • ABP VNext + Apache Kafka Exactly-Once 语义:金融级消息一致性实战
  • Linux用户和组管理及Apache服务安装
  • 浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络
  • Go语言实战案例:表单提交数据解析
  • CMU-15445(8)——PROJECT#3-Query Execution-Task#1