​Python20 Numpy基础

图片

NumPy(Numerical Python)是一个开源的Python库,广泛用于科学计算。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具和函数。NumPy是数据分析、机器学习、工程和科学研究中不可或缺的工具之一,因为它提供了简单而高效的数值运算功能。

1.NumPy的主要功能:

  1. 高效的数组运算:NumPy的数组比Python的内置数据结构更加高效和快速。

  2. 广播功能:能够处理不同大小数组之间的运算。

  3. 数学函数:包含大量的数学函数,用于在数组上执行各种数学运算。

  4. 线性代数、傅里叶变换和随机数生成:提供了丰富的库和API支持。

NumPy的使用广泛,几乎是所有使用Python进行数据科学的项目的基础库之一。

2.NumPy的使用方法

以下是Numpy库的常用方法,以下代码可直接复制到jupyter notebook运行。

生成随机数组:

# 构造4x4的随机数组
from numpy import *
random.rand(4,4)# 输出:
'''
array([[0.99764728, 0.06364547, 0.02182546, 0.16433105],[0.63289943, 0.29763976, 0.58491023, 0.28307729],[0.42512921, 0.27926124, 0.11818588, 0.58845666],[0.07451536, 0.65541451, 0.50638315, 0.27005101]])
'''

将数组转换成矩阵matrix:

# 调用mat函数将数组转换成矩阵matrix
randMat=mat(random.rand(4,4))
randMat
# 输出:
'''
matrix([[0.27496011, 0.9093084 , 0.0018111 , 0.13143669],[0.85885902, 0.94750823, 0.96820938, 0.06107537],[0.67165439, 0.69433003, 0.82237952, 0.25712598],[0.65327732, 0.30190633, 0.65090624, 0.05763251]])
'''

求矩阵的逆矩阵:

# 矩阵求逆运算
randMat.I# 输出:
'''
matrix([[-2.27475911,  1.74370229,  0.3710643 , -0.63203529],[ 1.15524442,  0.27630249, -1.52858325,  1.38871436],[ 2.0517843 , -2.27912633,  0.3015267 ,  3.06149341],[ 0.98720611, -0.61572784,  0.95857182, -0.9405201 ]])
'''

矩阵乘法:

# 矩阵乘法
invRandmat=randMat.I
randMat*invRandmat
# 输出:
'''
matrix([[ 1.00000000e+00,  0.00000000e+00,  8.32667268e-17,-1.59594560e-16],[ 0.00000000e+00,  1.00000000e+00, -1.66533454e-16,1.11022302e-16],[-1.11022302e-16,  2.22044605e-16,  1.00000000e+00,1.11022302e-16],[ 0.00000000e+00,  4.51028104e-17,  0.00000000e+00,1.00000000e+00]])
'''

用矩阵与逆矩阵相乘(得到单位阵,实际存在误差):

# 矩阵乘以其逆矩阵应该是单位矩阵
myEye=randMat*invRandmat  # 矩阵乘其逆矩阵,结果应为单位阵
myEye-eye(4)  # eye(4)将得到一个4阶单位阵
# 输出:
'''
matrix([[ 0.00000000e+00,  0.00000000e+00,  8.32667268e-17,-1.59594560e-16],[ 0.00000000e+00,  0.00000000e+00, -1.66533454e-16,1.11022302e-16],[-1.11022302e-16,  2.22044605e-16,  0.00000000e+00,1.11022302e-16],[ 0.00000000e+00,  4.51028104e-17,  0.00000000e+00,0.00000000e+00]])
'''

shape()函数获得数组的形状:

# shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。
e=eye(3)
e.shape[0]# 输出:
'''
3
'''
x=random.rand(4,3)  # 生成一个4x3的数组
x.shape[0]
# 输出:
'''
4
'''

numpy tile方法:numpy.tile(A,B),将重复A数组B次,这里的B可以时int类型也可以是元组类型。

# tile方法
tile([1,2],5)  # 列方向重复5次,行默认1次
# 输出:
'''
array([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
'''
# tile方法
tile([1,2],(2,1))  # 列方向重复2次,行1次
# 输出:
'''
array([[1, 2],[1, 2]])
'''

zeros()函数创建0数组:

# zeros函数
zeros(5)
# 输出:
'''
array([0., 0., 0., 0., 0.])
'''
# zeros函数
zeros([2,3])
# 输出:
'''
array([[0., 0., 0.],[0., 0., 0.]])
'''

3.KNN算法

# kNN算法
from numpy import *  # 从NumPy库导入所有功能模块
import operator  # 该模块包含一系列对标准运算符的函数化实现例如加法乘法等
def CreateDataSet():group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  # 一个NumPy数组,包含了四个二维坐标点。这些点是数据集中的样本labels=['A','A','B','B']  # 包含了与 group 数组中每个点相对应的类别标签return group,labels  # 返回两个值,group数组和labels列表group,labels=CreateDataSet()  # 将返回的两个值赋值给group和labels变量
group
# 输出:
'''
array([[1. , 1.1],[1. , 1. ],[0. , 0. ],[0. , 0.1]])
'''
labels
# 输出:
'''
['A', 'A', 'B', 'B']
'''
def  classify0(inX,dataSet,labels,k):  # inX:需要分类的输入样本;dataSet:训练数据集,包含多个已知分类的点;labels:训练数据集中每个点对应的标签;k:在kNN算法中,决定“邻居”数量的参数dataSetSize=dataSet.shape[0]  # 获取数据集的行数即样本数量print(dataSetSize)diffMat=tile(inX,(dataSetSize,1))-dataSet # 将输入的点与训练样本做差,使用 tile 函数将输入向量 inX 复制成与数据集相同大小的矩阵,然后与数据集中的每个点相减,计算输入点与数据集中每个点的差异print("这个是dataSet",dataSet)print("这个是测试的输入向量",tile(inX,(dataSetSize,1)))print("这个是点差",diffMat)sqDiffMat=diffMat**2  # 计算出距离平方print("这个是距离平方",sqDiffMat)sqDistances=sqDiffMat.sum(axis=1)  # 计算距离平方和print("这个是距离平方和",sqDistances)distances=sqDistances**2  # 开方得出距离sortedDistIndicies=distances.argsort()  # 从小到大排序,返回索引print("距离排序后对应的索引:",sortedDistIndicies)classCount={}  # 初始化一字典来存储每个类别的票数for i in range(k):  # 遍历最近的 k 个点,并对其类别进行计票voteIlabel=labels[sortedDistIndicies[i]]print(voteIlabel)classCount[voteIlabel]=classCount.get(voteIlabel,0)+1sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)  # 根据票数对类别进行排序print(sortedClassCount)return sortedClassCount[0][0]
x=classify0([0,0],group,labels,3)  
x# 输出:
'''
4
这个是dataSet [[1.  1.1][1.  1. ][0.  0. ][0.  0.1]]
这个是测试的输入向量 [[0 0][0 0][0 0][0 0]]
这个是点差 [[-1.  -1.1][-1.  -1. ][ 0.   0. ][ 0.  -0.1]]
这个是距离平方 [[1.   1.21][1.   1.  ][0.   0.  ][0.   0.01]]
这个是距离平方和 [2.21 2.   0.   0.01]
距离排序后对应的索引: [2 3 1 0]
B
B
A
[('B', 2), ('A', 1)]'B'
'''

4.使用k-近邻算法改进约会网站的配对效果

from numpy import zerosdef file2matrix(filename):# 定义标签映射字典label_map = {'largeDoses': 2, 'smallDoses': 1, 'didntLike': 0}  # 将字符串标签映射到整数fr = open(filename)arrayOLines = fr.readlines()  # 用readlines()方法读取文件中的每一行并存储在列表arrayOLines中fr.close()  # 读取完数据后应关闭文件numberOfLines = len(arrayOLines)  # 获取行数# 创建返回的NumPy矩阵, 行数为numberOfLines, 列数固定为3returnMat = zeros((numberOfLines, 3))classLabelVector = []  # 初始化标签列表index = 0for line in arrayOLines:line = line.strip()  # 去掉每行首尾空白listFromLine = line.split('\t')  # 按'\t'分割字符串returnMat[index, :] = listFromLine[0:3]  # 前三个元素存入矩阵# 使用映射字典获取标签classLabelVector.append(label_map[listFromLine[-1]])index += 1  # 索引递增,为处理下一行数据做准备return returnMat, classLabelVector  # 返回数据矩阵和对应的分类标签# 调用函数示例
filename = r"F:\桌面\python100\files\data\datingTestSet.txt"
datingDataMat, datingLabels = file2matrix(filename)# 输出数据矩阵,查看结果
datingDataMat
# 结果矩阵1-3列分别表示:飞行常客里程数、玩视频游戏所耗时间、每周消费的冰激凌数
'''
array([[4.0920000e+04, 8.3269760e+00, 9.5395200e-01],[1.4488000e+04, 7.1534690e+00, 1.6739040e+00],[2.6052000e+04, 1.4418710e+00, 8.0512400e-01],...,[2.6575000e+04, 1.0650102e+01, 8.6662700e-01],[4.8111000e+04, 9.1345280e+00, 7.2804500e-01],[4.3757000e+04, 7.8826010e+00, 1.3324460e+00]])
'''

结果数据的可视化散点图(取后两维):

# 制作原始数据的散点图
import matplotlib
import matplotlib.pyplot as pltfig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])  # 取矩阵的第二列(玩视频游戏所耗时间)、第三列数据(每周消费的冰激凌数)
plt.show()

图片

取结果矩阵的后两维特征进行可视化优化:

# 个性化标记散点图上的点
import matplotlib
import matplotlib.pyplot as pltfig=plt.figure()  # 创建一个图形实例fig
ax=fig.add_subplot(111)  # 向fig添加一个子图 ax,参数 111 表示在一个1x1的网格上创建第一个(也是唯一一个)子图,这是一种快捷方式
ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLables),15.0*array(datingLables))  # 将标签数组datingLables转换为NumPy数组,并乘以15.0,目的是让不同的标签对应的点大小有明显区分
plt.show()

图片

取结果矩阵的前两维特征进行可视化:

# 个性化标记散点图上的点
# 采用列1(飞行常客里程数--x轴)和列2(玩视频游戏时间--y轴)的属性值可以取得更好的效果
import matplotlib
import matplotlib.pyplot as pltfig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(datingDataMat[:,0],datingDataMat[:,1],15.0*array(datingLables),15.0*array(datingLables))  # 分别取数据矩阵的第一列和第二列作为x轴和y轴的数据
plt.show()

图片


以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

如何挑选护眼灯?一分钟带你了解挑选护眼灯的六大准则!

小时候,对正确用眼知识一无所知,也不明白何种光线环境对眼睛最为友善,结果如今的近视度数已濒临千度大关。虽然早已习惯佩戴眼镜的生活,但近视所带来的诸多不便仍旧在日常生活中无处不在。因此,对于家中孩子的视力健康…

GPT-5:人工智能的新篇章,未来已来

目录 GPT-5:人工智能的新篇章,未来已来 引言 1.人工智能的快速发展和对现代社会的影响 2.OpenAI首席技术官米拉穆拉蒂关于GPT-5发布的消息 3.GPT-5对AI领域的潜在影响和期待 4.迎接GPT-5时代的准备 方向一:GPT-5技术突破预测 1.1 GPT-…

整数划分(递归)

相信很多人和我一样刚开始一直不懂最后一个递推式。 q(n, m)表示:整数n按照“分出来的数”不大于m的分法有多少种。 可以看出q(6,2)可以分为两种情况,一是加数不包含2的部分,这部分也是家数都小于2的部分。还有一部分是包含2的,那…

动态合批与静态合批的网格内存占用

1)动态合批与静态合批的网格内存占用 2)如何让游戏能自动调起手机内置的“游戏空间”或“游戏助手” 3)如何控制mesh.triangles值 4)怎么让旧的粒子原地不动 这是第391篇UWA技术知识分享的推送,精选了UWA社区的热门话题…

LONGHEADS:无需训练的多头注意力长文本处理框架

大模型(LLMs)在处理海量文本数据时展现出了前所未有的能力。然而这些模型在面对超出其训练时所见序列长度的长文本时存在两个主要问题:一是模型对于超出预训练长度的文本难以有效泛化,二是注意力机制的二次方时间复杂度导致计算成…

C#语言+net技术架构+ VS2019开发的微信公众号预约挂号系统源码 微信就医全流程体验 什么是微信预约挂号系统?

C#语言net技术架构 VS2019开发的微信公众号预约挂号系统源码 微信就医全流程体验 什么是微信预约挂号系统? 微信预约挂号系统是一种基于互联网的预约挂号平台,通过与医院信息系统的对接,实现了患者通过手机微信轻松预约挂号的功能。预约挂号系…

Flutter图像编辑器应用:创造生动美丽的照片体验

介绍 引言 想象一下,在一个阳光明媚的下午,与家人或朋友漫步在风景如画的街道上。拿出手机,迫不及待地捕捉这一刻的美好,按下快门,留下了一张充满回忆的照片。 然而,回到家后发现照片的亮度有些偏暗&…

Element 进度条样式优化

在开发后台管理系统时,经常会用到进度条这样一个控件,Element UI中提供了progress这样一个组件,如下图所示: 该组件默认的颜色会比较单一,为此时常需要对该组件的样式进行一些优化,以满足实际项目的需求。 …

芒果YOLOv10改进64:主干Backbone篇RepVGG结构:简单但功能强大的卷积神经网络架构

💡本篇内容:YOLOv10改进RepVGG结构:简单但功能强大的卷积神经网络架构 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv10 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv10 应部分读者要求,新增一篇RepVGG 论文理论部分 + 原创最…

LabVIEW机器视觉在质量控制中的应用

基于LabVIEW的机器视觉系统在质量控制中应用广泛,通过图像采集、处理和分析,自动检测产品缺陷、测量尺寸和识别标记,提高生产效率和产品质量。下面介绍LabVIEW机器视觉系统在质量控制中的实现方法、应用场景及其优势。 项目背景 在现代制造业…

生鲜水果行业wordpress主题

水果蔬菜wordpress外贸自建站模板 水果、脐橙、牛油果、菠萝、凤梨、鲜枣、苹果、芒果、瓜果、百香果wordpress外贸独立站模板。 https://www.jianzhanpress.com/?p3932 生鲜wordpress外贸出口网站模板 水果、蔬菜、肉蛋奶、水产、干货等生鲜产品wordpress外贸出口公司网站…

css-Echarts图表柱状图,X轴横坐标值显示不完全问题

1.问题 在Echarts图表中当横坐标数值过多,或者数值过长时会导致部分横坐标不显示。数据量少或简单会默认显示完全,当放大时会导致部分横坐标隐藏。 更改第一个Mon字段名 会发现偶数横坐标显示隐藏; 2.解决方法 2.1 在x横坐标中添加interval…

JavaFX 下拉框

组合框允许用户选择几个选项之一。用户可以滚动到下拉列表。组合框可以是可编辑和不可编辑的。 创建组合框 以下代码将选项列表包装到ObservableList中&#xff0c;然后使用observable列表实例化ComboBox类。 ObservableList<String> options FXCollections.observab…

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot&#xff1a;基础使用详解 文章目录 快速上手 Spring Boot&#xff1a;基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置&#xff1a;以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…

ArkUI开发学习随机——得物卡片,京东登录界面

案例一&#xff1a;得物卡片 代码&#xff1a; Column(){Column(){Image($r("app.media.mihoyo")).width(200).height(200)Row(){Text("今晚玩这个 | 每日游戏打卡").fontWeight(700).fontSize(16).padding(4)}.width(200)Text("No.12").fontWe…

Unity的Excel转表工具

该Excel工具主要由Python语言完成&#xff0c;版本为3.x 主要功能&#xff1a; 1.转换后的数据存储结构为二进制。 2.excel文件可以选择多种数据类型&#xff1a;int、float、string、一维&#xff08;int、float、string&#xff09;、二维int、Map&#xff08;int/int、in…

DVWA-XSS(Stored)-beef

用Low Level来测试beef的使用 beef配置 如果kali没有beef的&#xff0c;进行下载 apt install beef-xss使用 beef-xss # 命令方式启动 beef-xss-stop # 命令方式关闭 systemctl start beef-xss.service #开启beefsystemctl stop beef-xss.service #关闭…

使用插件和微调优化 GPT 模型

文章目录 LLM 用例和示例产品警惕 AI 幻觉&#xff1a;限制与考虑使⽤插件和微调优化 GPT 模型 OpenAI 在其网站上展示了许多激励人心的客户故事&#xff0c;我们需要了解这些模型如何改变我们的社会并为商业和创造力开辟新机遇。正如你将看到的&#xff0c;许多企业已经开始使…

【 ARMv8/ARMv9 硬件加速系列 3.5.1 -- SVE 谓词寄存器有多少位?】

文章目录 SVE 谓词寄存器(predicate registers)简介SVE 谓词寄存器的位数SVE 谓词寄存器对向量寄存器的控制SVE 谓词寄存器位数计算SVE 谓词寄存器小结 SVE 谓词寄存器(predicate registers)简介 ARMv9的Scalable Vector Extension (SVE) 引入了谓词寄存器&#xff08;Predica…

JVM专题五:类加载器与双亲委派机制

通过上一篇Java的类加载机制相信大家已经搞明白了整个类加载从触发时机&#xff0c;接着我们就来看下类加载器&#xff0c;因为类加载机制是有加载器实现的。 类加载器的分类 启动类加载器 Bootstrap ClassLoader 是 Java 虚拟机&#xff08;JVM&#xff09;的一部分&#x…