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

NumPy基础入门

NumPy基础入门

前言

NumPy(Numerical Python)是Python科学计算的基础库,为数据分析、机器学习等领域提供了强大的数组操作能力。本文将带您从零开始,通过实际代码示例深入理解NumPy的核心概念和常用操作。

一、NumPy基础概念

1.1 什么是NumPy

NumPy是Python中用于科学计算的基础包,它提供了高性能的多维数组对象和用于处理这些数组的工具。NumPy的核心是ndarray(n-dimensional array)对象,这是一个多维数组,具有以下特点:

  • 同质数据类型
  • 固定大小
  • 支持向量化操作
  • 内存效率高

1.2 安装和导入

# 安装NumPy
# pip install numpy# 导入NumPy
import numpy as np

二、NumPy数组的创建

2.1 从Python列表创建数组

# 创建整数数组
arr1 = np.array([1, 2, 3, 4, 5])
print(f"数组:{arr1}")
print(f"数组类型:{type(arr1)}")
print(f"数组的元素类型:{arr1.dtype}")# 创建浮点数数组
arr2 = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
print(f"数组:{arr2}")
print(f"数组类型:{type(arr2)}")
print(f"数组的元素类型:{arr2.dtype}")

输出结果:

数组:[1 2 3 4 5]
数组类型:<class 'numpy.ndarray'>
数组的元素类型:int32数组:[1. 2. 3. 4. 5.]
数组类型:<class 'numpy.ndarray'>
数组的元素类型:float64

2.2 使用特殊函数创建数组

zeros() - 创建全零数组
# 创建2行3列的全零数组
arr3 = np.zeros((2, 3))
print(f"数组:{arr3}")
print(f"数组类型:{type(arr3)}")
print(f"数组的元素类型:{arr3.dtype}")

输出结果:

数组:[[0. 0. 0.][0. 0. 0.]]
数组类型:<class 'numpy.ndarray'>
数组的元素类型:float64
ones() - 创建全一数组
# 创建三维全一数组
arr4 = np.ones((2, 3, 4))
print(f"数组:{arr4}")
print(f"数组类型:{type(arr4)}")
print(f"数组的元素类型:{arr4.dtype}")

输出结果:

数组:[[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]][[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]]
数组类型:<class 'numpy.ndarray'>
数组的元素类型:float64
arange() - 创建等差数列
# 创建指定步长的数组
arr6 = np.arange(1, 5, 2, dtype=np.float32)
print(f"数组:{arr6}")
print(f"数组类型:{type(arr6)}")
print(f"数组的元素类型:{arr6.dtype}")

输出结果:

数组:[1. 3.]
数组类型:<class 'numpy.ndarray'>
数组的元素类型:float32

2.3 随机数组生成

# rand() - 生成0~1之间的随机数
arr8 = np.random.rand(2, 3)
print(f"rand数组:{arr8}")# randint() - 生成随机整数
arr9 = np.random.randint(1, 10, (2, 3))
print(f"randint数组:{arr9}")# uniform() - 生成指定范围的均匀分布随机数
arr10 = np.random.uniform(0, 2, (2, 3))
print(f"uniform数组:{arr10}")

三、NumPy数组属性详解

3.1 基本属性

# 创建一个3行5列的二维数组
arr = np.arange(15).reshape(3, 5)
print(f"ndarray对象:{arr}")# 查看数组的各种属性
print(f"数组的形状(维度):{arr.shape}")      # (3, 5)
print(f"数组的轴:{arr.ndim}")               # 2
print(f"数组的长度:{arr.size}")             # 15
print(f"数组的每个元素数据类型:{arr.dtype}")   # int32
print(f"数组的每个元素的大小(字节):{arr.itemsize}") # 4
print(f"数组的类型:{type(arr)}")

输出结果:

ndarray对象:[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14]]
数组的形状(维度):(3, 5)
数组的轴:2
数组的长度:15
数组的每个元素数据类型:int32
数组的每个元素的大小(字节):4
数组的类型:<class 'numpy.ndarray'>

3.2 属性说明

  • shape: 数组的形状,返回一个元组
  • ndim: 数组的维度数
  • size: 数组中元素的总数
  • dtype: 数组元素的数据类型
  • itemsize: 每个元素占用的字节数

四、特殊数列的创建

4.1 等差数列 - linspace()

# 创建包含终点的等差数列
a1 = np.linspace(1, 10, 10, endpoint=True)
print(f"包含终点的等差数列:{a1}")# 创建不包含终点的等差数列
a2 = np.linspace(1, 10, 10, endpoint=False)
print(f"不包含终点的等差数列:{a2}")

输出结果:

包含终点的等差数列:[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
不包含终点的等差数列:[1.  1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]

4.2 等比数列 - logspace()

# 创建以10为底的等比数列
a3 = np.logspace(0, 9, 10)
print(f"以10为底的等比数列:{a3}")# 创建以2为底的等比数列
a4 = np.logspace(0, 9, 10, base=2)
print(f"以2为底的等比数列:{a4}")

输出结果:

以10为底的等比数列:[1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]
以2为底的等比数列:[  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]

五、NumPy内置函数详解

5.1 基本数学函数

import numpy as np# 创建测试数组
arr = np.random.randn(2, 3)
print(f"原始数组:{arr}")# 基本数学函数
print(f"向上取整:{np.ceil(arr)}")
print(f"向下取整:{np.floor(arr)}")
print(f"四舍五入:{np.rint(arr)}")
print(f"绝对值:{np.abs(arr)}")
print(f"元素相乘:{np.multiply(arr, 2)}")
print(f"元素相除:{np.divide(arr, 2)}")

5.2 统计函数

# 创建测试数组
arr = np.arange(12).reshape(3, 4)
print(f"数组:{arr}")# 统计函数
print(f"累加和:{np.cumsum(arr)}")
print(f"所有元素的和:{np.sum(arr)}")
print(f"按列求和:{np.sum(arr, axis=0)}")
print(f"按行求和:{np.sum(arr, axis=1)}")
print(f"平均值:{np.mean(arr)}")
print(f"最大值:{np.max(arr)}")
print(f"最小值:{np.min(arr)}")
print(f"标准差:{np.std(arr)}")
print(f"方差:{np.var(arr)}")

输出结果:

数组:[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
累加和:[ 0  1  3  6 10 15 21 28 36 45 55 66]
所有元素的和:66
按列求和:[12 15 18 21]
按行求和:[ 6 22 38]

5.3 逻辑函数

# 创建测试数组
arr = np.random.randn(2, 3)
print(f"数组:{arr}")# 逻辑函数
print(f"是否有元素大于0:{np.any(arr > 0)}")
print(f"是否所有元素都大于0:{np.all(arr > 0)}")

5.4 去重和排序

# 去重函数
arr = np.array([[1, 2, 1, 6], [1, 3, 2, 5]])
print(f"原始数组:{arr}")
print(f"去重结果:{np.unique(arr)}")# 排序函数
arr = np.array([1, 5, 3, 2, 6])
print(f"原始数组:{arr}")# 方式1:返回新数组
arr_new = np.sort(arr)
print(f"排序后的新数组:{arr_new}")# 方式2:修改原数组
arr.sort()
print(f"排序后的原数组:{arr}")

六、NumPy数组运算

6.1 基本运算

# 创建两个数组
arr1 = np.array([10, 20, 30, 40])
arr2 = np.arange(4)# 基本运算
print(f"arr1:{arr1}")
print(f"arr2:{arr2}")
print(f"加法:{arr1 + arr2}")
print(f"乘法:{arr1 * arr2}")
print(f"使用multiply函数:{np.multiply(arr1, arr2)}")

输出结果:

arr1:[10 20 30 40]
arr2:[0 1 2 3]
加法:[10 21 32 43]
乘法:[  0  20  60 120]
使用multiply函数:[  0  20  60 120]

6.2 矩阵运算

情况1:行列数相同
# 创建两个相同形状的矩阵
arr1 = np.array([[1, 2, 3], [3, 4, 5]])
arr2 = np.array([[1, 2, 3], [3, 4, 5]])# 对应元素相乘
arr3 = arr1 * arr2
print(f"arr1:{arr1}")
print(f"arr2:{arr2}")
print(f"对应元素相乘:{arr3}")

输出结果:

arr1:[[1 2 3][3 4 5]]
arr2:[[1 2 3][3 4 5]]
对应元素相乘:[[ 1  4  9][ 9 16 25]]
情况2:矩阵乘法
# 创建两个矩阵
arr1 = np.array([[1, 2, 3], [3, 4, 5]])
arr2 = np.array([[9, 8], [6, 5], [3, 2]])# 矩阵乘法
arr3 = arr1.dot(arr2)
print(f"arr1:{arr1}")
print(f"arr2:{arr2}")
print(f"矩阵乘法结果:{arr3}")

输出结果:

arr1:[[1 2 3][3 4 5]]
arr2:[[9 8][6 5][3 2]]
矩阵乘法结果:[[30 24][66 54]]

七、数据类型转换

# 创建浮点数数组
arr11 = np.random.rand(2, 3)
print(f"原始数组:{arr11}")
print(f"数据类型:{arr11.dtype}")# 转换为整数类型
arr12 = arr11.astype(np.int64)
print(f"转换后数组:{arr12}")
print(f"转换后数据类型:{arr12.dtype}")

输出结果:

原始数组:[[0.72136545 0.6794097  0.48066728][0.23596109 0.72567473 0.28769567]]
数据类型:float64
转换后数组:[[0 0 0][0 0 0]]
转换后数据类型:int64

八、实际应用案例

8.1 数据分析基础操作

# 模拟学生成绩数据
scores = np.random.randint(60, 100, (5, 4))  # 5个学生,4门课程
print(f"学生成绩矩阵:\n{scores}")# 统计分析
print(f"每门课程的平均分:{np.mean(scores, axis=0)}")
print(f"每个学生的平均分:{np.mean(scores, axis=1)}")
print(f"最高分:{np.max(scores)}")
print(f"最低分:{np.min(scores)}")
print(f"成绩标准差:{np.std(scores):.2f}")

8.2 图像数据处理模拟

# 模拟图像数据(灰度图)
image = np.random.randint(0, 256, (10, 10))
print(f"原始图像数据:\n{image}")# 图像处理操作
# 1. 归一化到0-1范围
normalized = image / 255.0
print(f"归一化后:\n{normalized}")# 2. 图像增强(乘以1.5)
enhanced = np.clip(image * 1.5, 0, 255).astype(np.uint8)
print(f"增强后:\n{enhanced}")

九、总结

本文详细介绍了NumPy的基础知识,包括:

  1. 数组创建:从列表创建、使用特殊函数创建、随机数组生成
  2. 数组属性:shape、ndim、size、dtype等核心属性
  3. 特殊数列:等差数列和等比数列的创建方法
  4. 内置函数:数学函数、统计函数、逻辑函数、去重排序函数
  5. 数组运算:基本运算、矩阵运算、数据类型转换
  6. 实际应用:数据分析、图像处理等实际场景

NumPy作为Python科学计算的基础,掌握这些核心概念对于后续学习Pandas、Matplotlib、Scikit-learn等库至关重要。建议读者多动手实践,在实际项目中运用这些知识。

十、扩展学习建议

  1. 深入学习:了解NumPy的高级特性,如广播机制、索引技巧
  2. 结合应用:学习Pandas进行数据分析,结合Matplotlib进行数据可视化
  3. 性能优化:学习NumPy的向量化操作,提高代码执行效率
  4. 实际项目:参与数据分析项目,将理论知识应用到实际问题中

作者寄语:NumPy是Python科学计算生态系统的基石,掌握好NumPy将为您的数据科学之旅打下坚实基础。希望本文能帮助您快速入门NumPy,开启数据科学的学习之路!

http://www.dtcms.com/a/333607.html

相关文章:

  • 第40周——GAN入门
  • 详解区块链技术及主流区块链框架对比
  • PSME2通过IL-6/STAT3信号轴调控自噬
  • 【机器学习】核心分类及详细介绍
  • 控制块在SharedPtr中的作用(C++)
  • 【秋招笔试】2025.08.15饿了么秋招机考-第二题
  • 基于MATLAB的机器学习、深度学习实践应用
  • Matlab(5)进阶绘图
  • 后端学习资料 持续更新中
  • StarRocks数据库集群的完整部署流程
  • plantsimulation中存储(store)、缓冲区(buffer)、放置缓冲区(PlaceBuffer)的区别,分别应用于那种情况
  • 第七十四章:AI的“诊断大师”:梯度可视化(torchviz / tensorboardX)——看透模型“学习”的秘密!
  • 测试用例的一些事项
  • API接口大全实用指南:构建高质量接口的六个关键点
  • Adobe Photoshop 2024:软件安装包分享和详细安装教程
  • Unity与OpenGL中的材质系统详解
  • 杭州电子商务研究院发布“数字化市场部”新部门组织的概念定义
  • Gato:多模态、多任务、多具身的通用智能体架构
  • Vue 组件二次封装透传slots、refs、attrs、listeners
  • 【Spring框架】SpringAOP
  • Ubuntu 22.04 安装PCL(Point Cloud Library)和Eigen库
  • 基于 Ubuntu22.04 安装 SSH 服务,记录
  • 如何实现免密码 SSH 登录
  • 零基础-动手学深度学习-10.4. Bahdanau 注意力
  • week1-[一维数组]传送
  • python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
  • Linux下的软件编程——多任务(线程)
  • QT开发中如何加载第三方dll文件
  • C语言指针(五):回调函数与 qsort 的深层关联
  • 前端性能优化