详解 NumPy:关键知识点梳理与实践应用指引

news/2024/12/25 15:07:05/文章来源:https://www.cnblogs.com/java-note/p/18630451

一、NumPy简介

NumPy(Numerical Python)是一个功能强大的Python库,主要用于对多维数组(ndarray)进行高效的操作。它是许多其他数据科学和机器学习库(如Scikit - learn、Pandas等)的基础。

  1. 安装
    • 可以使用pip install numpy命令在命令行中安装NumPy。如果使用Anaconda环境,NumPy通常已经预先安装。
  2. 导入
    • 一般在Python脚本或交互式环境中,使用import numpy as np来导入NumPy库。这样在后续代码中可以使用np作为NumPy的别名来调用其函数和对象。

二、NumPy数组(ndarray)基础

  1. 创建数组
    • 从Python列表创建
      • 可以使用np.array()函数从Python列表创建NumPy数组。例如,a = np.array([1, 2, 3])创建了一个一维数组。如果是二维数组,可以使用b = np.array([[1, 2], [3, 4]])
    • 使用特定函数创建
      • np.zeros():创建全零数组。例如,np.zeros((3, 4))创建一个形状为(3,4)的二维全零数组,其中第一个参数是数组的形状(可以是元组形式)。
      • np.ones():创建全一数组。如np.ones(5)创建一个包含5个元素的一维全一数组。
      • np.arange():类似于Python的range()函数,用于创建等差数组。例如,np.arange(0, 10, 2)创建一个从0开始,以2为步长,小于10的数组,即[0, 2, 4, 6, 8]
      • np.linspace():用于创建指定数量的等间隔数组。例如,np.linspace(0, 1, 5)创建一个在0到1之间包含5个元素的等间隔数组,即[0., 0.25, 0.5, 0.75, 1.]
  2. 数组的属性
    • 形状(shape)
      • 可以通过ndarray.shape属性获取数组的形状。对于一维数组,它返回一个整数,表示数组元素的个数;对于二维数组,它返回一个元组,如(m, n),其中m是行数,n是列数。例如,对于数组a = np.array([[1, 2], [3, 4]])a.shape的值为(2, 2)
    • 数据类型(dtype)
      • ndarray.dtype属性返回数组元素的数据类型。NumPy支持多种数据类型,如int32float64complex128等。例如,a = np.array([1, 2, 3], dtype = np.float32)a.dtype的值为np.float32
    • 维度(ndim)
      • ndarray.ndim属性返回数组的维度。例如,一维数组的维度为1,二维数组的维度为2。如a = np.array([1, 2, 3])a.ndim的值为1;b = np.array([[1, 2], [3, 4]])b.ndim的值为2。
  3. 数组的索引和切片
    • 一维数组
      • 索引:和Python列表类似,使用方括号和索引值来访问数组元素。例如,对于数组a = np.array([1, 2, 3])a[0]访问第一个元素,即1。
      • 切片:使用start:stop:step的形式。例如,a[0:2]返回[1, 2]a[::2]返回[1, 3]
    • 二维数组
      • 索引:可以使用a[row_index, col_index]的形式。例如,对于数组b = np.array([[1, 2], [3, 4]])b[0, 0]访问第一行第一列的元素,即1。
      • 切片:对于行和列可以分别进行切片。例如,b[0:1, 0:2]返回一个包含第一行所有元素的二维数组,即[[1, 2]]

三、NumPy数组的运算

  1. 算术运算
    • 元素级运算
      • 对于形状相同的数组,可以进行元素级的加、减、乘、除等运算。例如,对于数组a = np.array([1, 2, 3])b = np.array([4, 5, 6])a + b得到[5, 7, 9]a * b得到[4, 10, 18]
    • 广播机制
      • 当两个数组形状不同但满足一定规则时,NumPy会自动进行广播运算。例如,一个形状为(3, 1)的数组和一个形状为(3,)的数组相加,NumPy会将形状为(3, 1)的数组在列方向上进行广播,使其形状与另一个数组匹配,然后进行元素级加法。
  2. 数学函数
    • NumPy提供了大量的数学函数,如np.sin()np.cos()np.exp()np.log()等。这些函数可以对数组中的每个元素进行操作。例如,对于数组a = np.array([0, np.pi/2, np.pi])np.sin(a)得到[0., 1., 0.]
  3. 统计函数
    • 求和(sum)
      • 可以使用ndarray.sum()方法对数组中的元素求和。对于二维数组,可以指定轴参数来按行或列求和。例如,对于数组b = np.array([[1, 2], [3, 4]])b.sum()得到所有元素的和10,b.sum(axis = 0)按列求和得到[4, 6]b.sum(axis = 1)按行求和得到[3, 7]
    • 平均值(mean)
      • ndarray.mean()方法用于计算数组元素的平均值。同样,对于二维数组可以指定轴参数。例如,b.mean()得到平均值2.5,b.mean(axis = 0)得到列平均值[2., 3.]b.mean(axis = 1)得到行平均值[1.5, 3.5]
    • 标准差(std)和方差(var)
      • ndarray.std()ndarray.var()分别用于计算数组元素的标准差和方差。它们也可以指定轴参数来计算二维数组按行或列的标准差和方差。

四、线性代数运算

  1. 矩阵乘法
    • 可以使用np.dot()函数或者@运算符(在Python 3.5及以上版本支持)来进行矩阵乘法。例如,对于矩阵A = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])np.dot(A, B)或者A @ B得到[[19, 22], [43, 50]]
  2. 求逆矩阵
    • 对于方阵,可以使用np.linalg.inv()函数求其逆矩阵。例如,对于矩阵A = np.array([[1, 2], [3, 4]])np.linalg.inv(A)得到逆矩阵[[-2., 1. ], [1.5, -0.5]]
  3. 特征值和特征向量
    • 使用np.linalg.eig()函数可以同时求出矩阵的特征值和特征向量。例如,对于矩阵Anp.linalg.eig(A)返回两个值,第一个是特征值数组,第二个是对应的特征向量数组(以列向量形式存储)。

五、数组操作和变换

  1. 形状变换
    • 重塑(reshape)
      • ndarray.reshape()方法可以改变数组的形状。例如,对于一维数组a = np.array([1, 2, 3, 4])a.reshape((2, 2))将其重塑为一个形状为(2, 2)的二维数组[[1, 2], [3, 4]]。需要注意的是,重塑后的数组元素个数必须与原数组相同。
    • 展平(flatten)和ravel
      • ndarray.flatten()ndarray.ravel()都可以将多维数组展平为一维数组。它们的区别在于flatten()返回一个副本,而ravel()返回一个视图(如果可能的话)。例如,对于二维数组b = np.array([[1, 2], [3, 4]])b.flatten()b.ravel()都返回[1, 2, 3, 4],但对b.ravel()返回的数组进行修改可能会影响原数组。
  2. 数组拼接和分割
    • 拼接(concatenate、hstack、vstack)
      • np.concatenate()函数可以沿着指定的轴拼接多个数组。例如,对于数组a = np.array([1, 2])b = np.array([3, 4])np.concatenate((a, b))得到[1, 2, 3, 4]np.hstack()用于水平拼接(按列拼接),np.vstack()用于垂直拼接(按行拼接)。
    • 分割(split)
      • np.split()函数可以将一个数组分割成多个子数组。例如,对于数组c = np.array([1, 2, 3, 4])np.split(c, 2)将其分割成两个长度相等的子数组[1, 2][3, 4]。也可以指定分割点的位置来进行非等分割。

六、高级索引和布尔索引

  1. 高级索引
    • 整数数组索引
      • 可以使用整数数组来索引数组。例如,对于数组a = np.array([1, 2, 3, 4, 5]),使用b = np.array([0, 2, 4])作为索引,a[b]得到[1, 3, 5]。对于二维数组,可以使用两个整数数组来分别指定行和列的索引。
    • 花式索引
      • 花式索引是一种更灵活的整数数组索引方式。例如,对于二维数组A = np.array([[1, 2], [3, 4], [5, 6]]),使用b = np.array([0, 2])作为行索引,A[b]得到[[1, 2], [5, 6]]
  2. 布尔索引
    • 可以根据布尔数组来选择数组中的元素。例如,对于数组a = np.array([1, 2, 3, 4, 5]),创建布尔数组b = a > 3(得到[False, False, False, True, True]),然后a[b]得到[4, 5]。对于二维数组,可以使用布尔数组来选择满足条件的行或列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858660.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

门店协作的未来:协作文档如何提升客户体验?

汽车销售是一种高竞争、高需求精细化管理的业务形态。门店销售团队不仅需要对接客户,还要实时反馈总部的策略与数据。如果销售流程中协同效率不足,往往会导致商机流失和客户满意度下降。协作文档工具的普及,为车企门店带来了全新解决方案。 车企门店销售面临的核心问题 在车…

功率器件的热设计基础(二)——热阻的串联和并联

功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计…

视频分析设备平台EasyCVR关于未来监控系统可能会集成哪些新技术?

随着科技的飞速发展,监控系统正经历着一场革命性的变革。未来的监控系统将不再是单一的观察和记录工具,而是集成了多种前沿技术的智能平台,它们将极大地提高安全性、效率和响应速度。以下是未来监控系统可能集成的一些关键技术。1、人工智能技术 1)监控系统将越来越多地应用…

【亲测能用】专业音乐制作软件Ableton Live Suite v12.1.5 中文版(附安装教程)

软件介绍 在数字音频工作站(DAW)的领域中,Ableton Live以其创新和灵活性脱颖而出,成为全球音乐家和制作人的首选工具。由德国Ableton公司精心打造,这款软件不仅支持无缝的音乐播放和即时编辑,还提供了强大的音频效果和虚拟乐器,让音乐创作变得无限可能。 功能亮点 Ablet…

【测试侧】产品场景用例模板

产品的场景法用例设计的测试场景用例模板

宝藏推荐!J 人电商零售圣诞忙,哪 6 款办公软件能提升工作学习效能?

圣诞节的钟声敲响,电商零售行业瞬间陷入紧张而激烈的竞争漩涡。对于 J 人特质主导的电商团队而言,这不仅是一场销售大战,更是对团队协作与个人能力的严峻考验。在这关键时期,高效的办公软件犹如得力助手,能够帮助团队优化工作流程、提升沟通效率,实现工作与学习的双丰收。…

源码编译geoserver(idea)

官方教程:https://docs.geoserver.org/main/en/developer/quickstart/intellij.html从 git 存储库中检出源代码:git clone https://github.com/geoserver/geoserver.git geoserver列出可用的分支:% git branch2.21.x2.22.x* main选择main最新动态:% git checkout main或者为…

MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题

CBitmap、CBrush、CFont、CPalette、CPen、CRgn均继承自CGdiObject,CDI对象属于CGdiObject,在该类的析构函数中会释放,因此CBitmap、CBrush、CFont、CPalette、CPen、CRgn不必要显式调用DeleteObject()。如果GDI对象在在堆上分配的,则在特定时刻需要删除它,以便执行其析构…

【甲方安全】政府行业+80个威胁检测与安全事件分析场景(2025)

本篇幅详细梳理了 80 个在政企网络安全分析中常见的应用场景,这些场景涵盖了从攻击前兆(如漏洞扫描、情报收集)、攻击过程(如漏洞利用、横向移动)到攻击结果(如数据加密、信息泄露)的各个阶段,旨在协助 SOC 分析师们更好地构建主动防御体系。这些场景并非抽象概念,而是…

想自己做大模型备案的企业看过来【评估测试题+备案源文件】

大模型备案,大模型语料标注规则,大模型安全评估报告文章目录 (一)适用主体 (二)语料安全 (三)模型安全 (四)安全措施要求 (五)词库要求 (六)安全评估要求 (七)附录大模型备案材料源文件 2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称…

树洞09

情绪很不好,没人能依靠 钱财多有价,感情胜千金 金玉良缘广,木石前盟稀 愿君有真爱,伴君度此生。

qt读写ini文件

[group1]key1=val1key2=val2sameKay=sameVal [group2]jian1=zhi1jian2=zhi2sameKay=sameZhi比如创建插入一组ini文件,下面是文件写入的代码; Ini文件的写入 ini文件不需要像xml和json一样需要使用QFile打开文件,只需将文件路径及文件格式传入即可(下方代码运行完毕,ini文件…