​Python20 Numpy基础

news2024/12/22 6:24:02

图片

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)+1
    sortedClassCount=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 zeros

def 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, 列数固定为3
    returnMat = zeros((numberOfLines, 3))
    classLabelVector = []  # 初始化标签列表
    index = 0
    for 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 plt

fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])  # 取矩阵的第二列(玩视频游戏所耗时间)、第三列数据(每周消费的冰激凌数)
plt.show()

图片

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

# 个性化标记散点图上的点
import matplotlib
import matplotlib.pyplot as plt

fig=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 plt

fig=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.coloradmin.cn/o/1860343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

Labview_网络流

网络流的介绍 网络流是一种易于配置、紧密集成的动态通信方法,用于将数据从一个应用程序传输到另一个应用程序,其吞吐量和延迟特性可与 TCP 相媲美。但是,与 TCP 不同的是,网络流直接支持任意数据类型的传输,而无需先…

一键设置水印,全面护航:跨境平台产品刊登新功能上线

一、Allegro、OZON、Coupang、Cdiscount、Wish、Temu、Walmart、OnBuy、TikTok、Wildberries平台新增产品刊登支持设置水印。 【普通水印】直接跳转到添加水印页面,勾选所要的图片,点击确定,自动替换原图。 【管理水印】直接跳转到水印模版页…

JAVA【案例5-2】模拟默认密码自动生成

【模拟默认密码自动生成】 1、案例描述 本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。 2、案例目的 (1&#xff09…

汇凯金业:现货黄金交易规则有哪些 投资必读

现货黄金投资近年来发展迅猛,吸引了许多新手投资者进入市场。那么,现货黄金交易规则究竟有哪些?本文将详细介绍现货黄金交易的关键规则,帮助投资者更好地掌握投资技巧,实现稳健收益。 一、保证金交易制 什么是保证金交易? 现…

【智能家居照明磁吸灯驱动方案】LED磁吸轨道灯智能照明调光控制芯片FP7195,耐压80V降压恒流无频闪芯片,0.1%深度调光无频闪无抖动,调光细腻丝滑

随着极简主义无主灯照明的设计风潮来袭,磁吸灯成了室内灯光设计的重点元素,磁吸灯的设计采用模块化的概念。 预设好轨道后,可以自由选择光源的样式:筒灯、射灯、格栅灯、泛光条、吊线灯等等,各种灯具及不同色温光源的…

怎么改png图片的颜色?

要改变PNG图片的颜色,可以采取以下几种方法: 使用Photoshop等图像编辑软件:或者,也可以使用Photoshop中的选区工具(如矩形选框、椭圆选框、套索工具等)选中图片中需要改变颜色的部分,然后创建一…

Kompas AI自然语言处理能力对比

一、引言 自然语言处理(NLP)是衡量人工智能(AI)系统智能程度的重要指标之一。NLP技术的进步使得机器能够理解、解释和生成人类语言,在各个领域中发挥了巨大的作用。本文将对比Kompas AI与其他主要AI产品在NLP方面的表…

暴雨虐长沙,生灵受煎熬

今天,“湖南长沙市遭遇强降雨,一小时的降雨量足够注满54个西湖”这消息,终于登上互联网社交平台热搜榜。 截图:来源社交网站 综合多家媒体消息概述如下。 昨(24日)天,湖南长沙市遭遇强降雨,一…

房产平台系统小程序源码

🏠 一键解锁购房新体验 🔓 房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息; 后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息; 功能完善的一块房产小程序 🌟 房产平台小程序的魅力…

LeetCode —— 只出现一次的数字

只出现一次的数字 I 本题依靠异或运算符的特性&#xff0c;两个相同数据异或等于0&#xff0c;数字与0异或为本身即可解答。代码如下: class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e : nums){ret ^ e;}return ret;} };只出…

手机卡顿反应慢怎么解决?4个实用技巧,轻松提升运行速度

当你的手机变得像一只蜗牛一样缓慢&#xff0c;每一个滑动、每一次点击都充满了无尽的等待&#xff0c;是不是让你感到无比沮丧&#xff1f;别担心&#xff0c;你并不孤单。手机卡顿、反应慢是许多用户都会遇到的问题。那么&#xff0c;手机卡顿反应慢怎么解决呢&#xff1f;本…

百度comate 专业版免费试用90天

我发现一个编码效率提升好帮手——Baidu Comate&#xff0c;结合文心大模型和百度编程大数据&#xff0c;为你生成优质编程代码。现在通过我的链接注册&#xff0c;立得90天专业版体验卡&#xff0c;来吧&#xff0c;让我们一起释放“十倍”软件生产力&#xff01; https://com…

软通动力子公司鸿湖万联携多款重磅创新产品亮相华为开发者大会

6月21日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞松山湖盛大开幕。作为面向全球开发者的年度盛事&#xff0c;大会吸引了来自全球范围内的数千名杰出的开发者、合作伙伴、行业专家及学术精英&#xff0c;旨在深入研讨科技创新如何引领行业进步&#x…

游戏AI的创造思路-技术基础-深度学习(5)

继续深度学习技术的探讨&#xff0c;填坑不断&#xff0c;头秃不断~~~~~ 3.5. 自编码器&#xff08;AE&#xff09; 3.5.1. 定义 自编码器&#xff08;Autoencoder, AE&#xff09;是一种数据的压缩算法&#xff0c;其中压缩和解压缩函数是数据相关的、有损的、从样本中自动学…

嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录 一、简介 1.概念 2.结构 3.特点 4.优缺点 二、协议帧组成 1.起始位 2.数据位 3.奇偶校验位 4.停止位 三、UART通信过程 四、USART与UART区别 五、代码实现 1.硬件框图 2.软件实现 一、简介 1.概念 USART&#xff08;Universal Synchronous Asynchronous R…

c语言常用易错记录

c语言常用易错记录 文章目录 c语言常用易错记录1.for循环 1.for循环 示例&#xff1a; #include <stdio.h>int main() {int i;for (i 0; i < 10; i) {printf("%d\n", i);}return 0; }执行顺序 备注&#xff1a;此图来源于b站鹏哥C语言视频课截图&#xf…

微软NVIDIA讲师直播讲解:探索LLM大模型的小型化 —— 小模型在NVIDIA Jetson 与 NIM 平台的最佳实践

Webinar主题&#xff1a;探索LLM大模型的小型化 —— 小模型在NVIDIA Jetson 与 NIM 平台的最佳实践 时间&#xff1a;6月25号 晚8点-9点 时长&#xff1a;1h 活动形式&#xff1a;线上 点击链接报名本次在线研讨会&#xff1a;https://www.nvidia.cn/webinars/sessions/?s…

7thonline第七在线受邀出席零售业卓越运营联盟(COER)2024

近期&#xff0c;一场汇集行业精英、探讨卓越运营的盛会——零售业卓越运营联盟&#xff08;COER&#xff09;2024论坛开幕。此次论坛吸引了全球众多零售业者的关注&#xff0c;7thonline第七在线创始人马克骏先生也应邀参与该论坛&#xff0c;共同探讨零售业的未来发展趋势。 …

Linux_应用篇(24) CAN 应用编程基础

本章我们学习 CAN 应用编程&#xff0c; CAN 是目前应用非常广泛的现场总线之一&#xff0c;主要应用于汽车电子和工业领域&#xff0c;尤其是汽车领域&#xff0c;汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。 CAN 总线目前是自动化领域发展的热点技术之一&#xf…