(二)Jupyter Notebook, numpy, matplotlib的使用

2023-10-26

笔记:机器学习入门专栏笔记对应jupyternotebook以及封装的各种算法个人笔记,如有错误,感谢指出!-机器学习文档类资源-CSDN文库

二,Jupyter Notebook,numpy, matplotlib的使用

下载anaconda,建立环境

一,jupyternotebook使用

在特定文件夹下打开Jupyter notebook:

定位到特定文件夹,在路径上输入cmd,打开指令窗口再输入jupyternotebook

使用jupyter notebook的快捷指令

Shift+enter运行并选中下一个cell

Markdown格式:Basic writing and formatting syntax - GitHub Docs

Jupyter notebook的一些魔法命令:

%run调用目录下的.py等文件,或者可以直接import模块

%timeit 测试代码性能

%time 循环时不想多次执行命令,使用这个,因为多次执行命令可能会有问题,比如每次执行差别都很大等。

二,numpy使用

import numpy as np #经常使用numpy可以方便些

np.__version__ #查看版本号

L = [i for i inrange(10)]

L[5] = "MachineLearning"

## [0, 1, 2, 3, 4, 'Machine Learning', 6, 7, 8, 9]

python的list可以不止一种数据类型,但这也造成python执行效率慢很多,因为每次执行前都要检查每一个元素的类型

import array

arr = array.array('i',[i for i in range(10)])

array提高了效率,但是list只能是一种数据类型,并且array没有将数据当作向量或者矩阵,不支持基本运算。

nparr= np.array([i for i in range(10)]) #numpy的array也只能存储一种类型

nparr.dtype #可以查看是哪种类型

numpy.zeros (numpy.ones同理):

numpy.full产生指定数值的矩阵:

np.full((3, 5), 666)

np.full(fill_value=666,shape=(3, 5))

arrange

range(X,X,X)#步长不能是浮点数

numpy.arrange(X,X,X)#和python不同的是,步长可以是浮点数

X =np.arange(15).reshape((3, 5))

linspace

np.linspace(0,20, 10) #截取十个点,包括0和20

randint 随机整数

np.random.randint(0,10) # [0, 10)之间的随机数

np.random.randint(0,10, size=10) #随机向量

np.random.randint(0,10, size=(3,5)) #随机矩阵

seed

#计算机的随机数是伪随机数,先定一个种子,这样生成的随机数就不变了

np.random.seed(666)

np.random.randint(0,10, size=(3,5))

random #随机浮点数

np.random.random() #默认范围0-1

np.random.random((3,5)) #0-1之间均匀分布的随机浮点数

normal #正态分布的随机数

np.random.normal() #默认均值为0,方差为1正态分布

np.random.normal(10,100) #均值为10,方差100

np.random.normal(0,1, (3, 5)) #生成(3,5)大小的随机数矩阵

x =np.random.normal(0, 1, 1000000) #取一百个标准正态分布的点

help:

help(np.random.normal)

numpy.array基本操作

x.ndim #查看数组的维数

x.shape #返回一个元组

x.size #返回元素的个数

x[0] #一维数组索引

X[0,0] #访问多维数组元素

x[1::2] #一维数组切片,最后一个数是步长

X[::-1,::-1] #多维数组切片,用逗号隔开维度 #实现矩阵反转

X[:2][:3] #结果不一样,在numpy中使用","做多维索引,相当于取了俩次切片

X[:, 0] #只取矩阵第一列

矩阵的子矩阵

#numpy采取引用子矩阵的方式提高程序的运行效率

subX =X[:2, :3] #切下子矩阵

subX[0,0] = 100 #改变子矩阵的一个元素,初始矩阵也会改变

#当改变了子矩阵的某一个元素,同时也改变了初始矩阵的元素

subX =X[:2, :3].copy() #创建一个与原矩阵无关的子矩阵

reshape

x.reshape(2, 5) #x开始是个十个元素的一维向量,reshape成25的矩阵

#reshape方法没有改变x自身!

A =x.reshape(2, 5) #可以将reshape结果赋值给A

B =x.reshape(1, 10)

B.ndim=2

x.ndim=1

##B:array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]) 和x不一样,B是二维,因为有俩个方括号

x.reshape(10,-1) #改变向量方向,-1的作用是不管每一行有几个元素,计算机自己算

矩阵的合并

x = np.array([1, 2, 3])

y = np.array([3, 2, 1])

np.concatenate([x, y])

##array([1, 2, 3, 3, 2, 1])

#可以理解为A是有俩个元素,每个元素又有三个元素的一维数组,合并就变成有四个元素,每个元素有三个元素的数组

np.concatenate([A,A], axis=1) #axis是轴,默认是0,就是沿着第一个维度,行维度拼接,结果同上;axis=1则表示在第二个维度上拼接,也就是在列这一维度上拼接

np.vstack([A, z])#垂直方向堆叠

np.hstack([A,B]) #水平方向堆叠

矩阵的分割

x = np.arange(10)

x1,x2, x3 = np.split(x, [3, 7]) #[]里的是分割点,在3和7之前分割

A =np.arange(16).reshape((4, 4))

A1, A2= np.split(A, [2]) #默认是基于行这个0维维度分割 这里[]指的是分成俩部分

A1, A2= np.split(A, [2], axis=1) #列上分割

upper, lower =np.vsplit(A, [2]) #垂直方向分割成俩部分

left, right =np.hsplit(A, [2])

有啥用?提取特征向量

data =np.arange(16).reshape((4, 4))

X, y = np.hsplit(data,[-1])

矩阵的运算

n = 10

L = [i for i inrange(n)]

2 * L *结果是俩个L重复排列

#使用python基础语法可以这样实现,但是运行速度非常非常慢,因为加入了for循环

import numpy as np

L = np.arange(n)

A =np.array(2*e for e in L) #使用生成表达式,运行速率更快

A = 2* L #并且支持这样的数学表达实现元素乘以2

university functionsof numpy(numpy的广播功能)

X = np.arange(1,16).reshape((3, 5))

X+1 #对应X所有元素全部加一

np.abs(X) #求绝对值

np.sin(X) #求正弦 同cos、tan、arctan

np.exp(X)

np.power(3,X) #取3的X次方

np.log(X) #ln函数

np.log2(X) #log以2为底的对数

同理,俩个形状相同的矩阵的加减乘除都是对应元素的运算

A.dot(B) #对应的线性代数里的矩阵乘法

A.T #求矩阵A的转置

向量和矩阵的加法或乘法,相当于把向量加到矩阵的每一行相应的向量做加法或乘法

np.tile(v,(2, 1)) #堆叠的方式,在行上堆叠俩次个,列上堆叠一个

使用dot()函数计算向量与矩阵相乘,numpy会自动判断向量是行向量还是列向量

矩阵的逆

np.linalg.inv(A) #linalg是线性代数模块 inv()求逆矩阵,矩阵必须是方阵

矩阵的伪逆

求不是方阵的矩阵的“逆矩阵”,求得的结果也满足矩阵相乘是单位矩阵

pinvX = np.linalg.pinv(X) #X是28的矩阵,pinvX是82的矩阵

numpy的聚合操作

#numpy中的sum函数比Python自带的sum函数运行的效率是快近一百倍的

import numpy as np

#向量的聚合运算

L =np.random.random(100)

np.sum(L)

np.min(L)

np.max(L)

big_array.min() #面向对象的调用方式

#矩阵的聚合运算

X =np.arange(16).reshape(4,-1)

big_array =np.random.rand(1000000)

np.sum(X) #所有元素的和

np.sum(X,axis=0) #矩阵行所有向量相加,即每一列的和 axis表示沿着某个轴运算

np.prod(X) #所有元素的乘积 product

np.mean(X) #求平均值

np.median(X) #求中位数

np.percentile(big_array,q=50) #统计学中的百分位概念 求这组数中50%的元素小于 等于函数生成的值

np.var(big_array) #求方差

np.std(big_array) #求标准差

Numpy的arg运算(索引)

import numpy as np

x = np.random.normal(0,1, 1000000)

np.argmin(x) #找到数组中最小值的索引值(最小值的位置)

x = np.arange(16)

np.random.shuffle(x) #对x进行乱序处理

np.sort(x) #返回一个排好序的向量,但没有改变x本身

x.sort() #使用面向对象的操作可以直接把x进行排序,改变了x本身

X =np.random.randint(10, size=(4,4))

np.sort(X,axis=0) #默认把每一列的元素进行了排序(沿着行的方向进行排序)

np.argsort(X) #对矩阵使用索引,返回的矩阵是从小到大数值的索引值

np.partition(x,3) #快速排序 第二个参数是标定点,把3前和3后的数进行排序

np.argpartition(x,3) #返回的还是索引值

numpy中的比较和FancyIndexing

#创建一个列表,之后再利用数组引用这个列表就可以得到对应的索引

import numpy as np

x = np.arange(16)

ind =[3, 5, 7] #创建列表

x[ind] #获得索引

ind =np.array([[0, 2], [1, 3]]) #索引还可以是多维数组

x[ind]

X = x.reshape(4, -1)

col =[True, False, True, True] #也可以用布尔数组进行提取

X[0,col] #输出的就是第0行上,对应true的元素

#输入x<=3等这样的比较运算符输出的是布尔数组或矩阵

np.count_nonzero(x <= 3) #数出来输出的有几个非零(false)

np.any(x== 0) #检查传入的数组中是否有任意的x==0的

np.all(x> 0) #所有元素都大于0才返回true

#对于二维矩阵同样适用

np.sum((x> 3) & (x < 10)) #类似位运算符 #输出的是x>0且x<10元素的个数

np.sum((x% 2 == 0) | (x > 10)) #或

np.sum(~(x== 0)) #非

数据处理中一般都会使用pandas对数据进行预处理,再将处理后的数据结果送给numpy,再把数据给机器学习

三,matplotlib使用

matplotlib基础:

importmatplotlib as mpl #一般用不到整个库

importmatplotlib.pyplot as plt #一般只用到一个子模块就可以满足大部分需求

import numpy as np

x =np.linspace(0, 10, 100) #(起始点,终止点,点个数)

y = np.sin(x)

plt.plot(x,y) #显示不出图像,只是执行命令

plt.show() #绘制一条曲线

#下面绘制俩条曲线sin和cos

siny =y.copy() #直接把上边的y复制

cosy = np.cos(x)

plt.plot(x, siny)

plt.plot(x, cosy)

plt.show() #渲染这俩条曲线

#plt.plot(x, cosy, color="red", linestyle="--") #改变线形和颜色

关于linestyle参数:https://matplotlib.org/devdocs/gallery/lines_bars_and_markers/line_styles_reference.html

关于color参数:https://matplotlib.org/2.0.2/api/colors_api.html

plt.xlim(-5, 15)

plt.ylim(0,1) #分别调节坐标轴的范围

plt.axis([-1,11, -2, 2]) #同时调节x轴,y轴的范围

plt.plot(x,siny, label="sin(x)") #绘制的同时注明曲线的名称

plt.plot(x, cosy,color="red", linestyle="--", label="cos(x)")

plt.xlabel("xaxis")

plt.ylabel("yvalue") #绘制横纵坐标的名称

plt.title("Welcometo matplotlib world!") #给图片起标题

plt.legend() #绘制图像,加上图注

绘制散点图:

plt.scatter(x, siny)

plt.scatter(x,cosy, color="red") #绘制散点图

plt.show()

x = np.random.normal(0,1, 10000)

y =np.random.normal(0, 1, 10000) #正态分布

plt.scatter(x,y, alpha=0.05) #alpha是调节不透明度 0完全透明

plt.show()

读取数据和简单的数据探索:

import numpy as np

import matplotlib asmpl

importmatplotlib.pyplot as plt

fromsklearn import datasets #使用其中的一个模块 一定要注意环境

iris =datasets.load_iris() #datasets里其实包含了许多的数据,其中包含鸢尾花数据

#datasets,load然后点击tab即可

iris.keys() #查看数据集中的特征特征名称

iris.data #查看数据集

iris.target #表示鸢尾花的种类

X =iris.data[:,:2] #绘制二维数据 只取前俩列

plt.scatter(X[:,0],X[:,1]) #分别取第一列和第二列为横纵数轴

plt.show()

y =iris.target #取鸢尾花种类的数组 是个长度为150的向量

plt.scatter(X[y==0,0],X[y==0,1], color="red", marker="o") #取y==0的鸢尾花

plt.scatter(X[y==1,0],X[y==1,1], color="blue", marker="+") #行和列不变

plt.scatter(X[y==2,0],X[y==2,1], color="green", marker="x")

plt.show() #最终标明三种鸢尾花

#这里只是选择了俩个维度绘制,结果有俩种鸢尾花混叠在一起不好区分

关于marker参数:http://matplotlib.org/1.4.2/api/markers_api.html

当我们选取另外俩中鸢尾花的特征进行绘制后结果会不一样,可能更容易区分

X =iris.data[:,2:] #取后俩列特征数据

plt.scatter(X[y==0,0],X[y==0,1], color="red", marker="o")

plt.scatter(X[y==1,0],X[y==1,1], color="blue", marker="+")

plt.scatter(X[y==2,0],X[y==2,1], color="green", marker="x")

plt.show()

#结果就很容易区分了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(二)Jupyter Notebook, numpy, matplotlib的使用 的相关文章

  • 自 1.4.0 版本以来,sphinx_rtd_theme 不再是硬依赖项

    C Users Administrator Desktop item code serv documents api gt 制作 html 运行 Sphinx v1 6 2 加载腌制环境 失败 无法获取属性 WarningStream
  • 字符串的“相关矩阵”。名义数据的相似度

    这是我的数据框 df store 1 store 2 store 3 store 4 0 banana banana plum banana 1 orange tangerine pear orange 2 apple pear melon
  • pandas 用 nan 值切割了一系列

    我想将 pandas cut 函数应用于包含 NaN 的序列 期望的行为是它对非 NaN 元素进行存储并为 NaN 元素返回 NaN import pandas as pd numbers with nan pd Series 3 1 2
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • Bokeh 相当于 matplotlib 子图

    我正在寻找一种方法来创建包含多个子图的绘图 例如 fig ax0 ax1 plt subplots nrows 2 sharex True 可以在 matplotlib 中完成 然后可以通过以下方式解决ax0 and ax1 有没有办法在
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 读取 JSON 文件并将其漂亮打印到另一个文件

    我有一个复杂 嵌套 的 json 文本文件 它是文本文件中的一长行 有什么方法可以读取文件 在 python 中 并将 json 缩进 漂亮地打印到新的文本文件中吗 使用读取文件json load 并使用json dump 在指定缩进值时将
  • Python 有哪些 SOAP 客户端库,它们的文档在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 matplotlib 中查看然后自动关闭图形?

    我必须检查我的参数设置是否正确 因此我需要绘制许多图 为了绘制这些图 我选择使用 matplotlib 每次检查后 我需要单击左上角的关闭按钮 这很微不足道 那么有没有什么方法可以让剧情在3 5秒左右显示并且无需点击就自动关闭呢 我知道关于
  • 无法写入文本文件

    我正在运行一些测试并需要写入文件 当我运行测试时open file r 不写入文件 测试脚本如下 class GetDetailsIP TestGet def runTest self self category PTZ try This
  • 使用多索引列对多列求和

    我有一个从数据透视表创建的数据框 看起来类似于 import pandas as pd d company1 False Negative April 2012 112 0 April 2013 370 0 April 2014 499 0
  • python 中打印变量和字符串

    好吧 我知道如何打印变量和字符串 但是我如何打印类似 我的字符串 card price 的内容 它是我的变量 我的意思是 这是我的代码 print I have and here I would like to print my varia
  • 返回 OSError 异常类的子类实例的逻辑在哪里?

    我一直在寻找一些对某些人来说可能相对愚蠢的东西 但对我来说非常有趣 输入和输出错误已合并为OSError在 Python 3 3 中 异常类层次结构发生了变化 关于内置类的一个有趣的特性OSError是这样 它在传递时返回它的子类errno
  • 当前异常上下文掩盖了先前的错误

    以下是我在 Doug Hellman 网站上名为 masking exceptions catch py 的文件中找到的示例 我暂时无法找到链接 throws 中引发的异常将被丢弃 而 cleanup 中引发的异常将被报告 道格在他的文章中
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • Python 中的延迟求值/惰性求值

    我想延迟对类实例的成员函数的调用的评估 直到该实例实际存在 最小工作示例 class TestClass def init self variable 0 self variable 0 variable 0 def get variabl
  • 使用 PyODBC 选择表中的列名

    我正在编写一个 Python 程序 该程序使用 PyODBC 从 Microsoft Access mdb 文件中选择一些数据 我需要发现几个不同表的列名 在 SQL Server 中 这可以通过使用类似的查询来完成 SELECT c na
  • 如何从已安装的云端硬盘文件夹中永久删除?

    我编写了一个脚本 在每次迭代后将我的模型和训练示例上传到 Google Drive 以防发生崩溃或任何阻止笔记本运行的情况 如下所示 drive path drive My Drive Colab Notebooks models if p
  • 如何使用 np.newaxis?

    What is numpy newaxis https numpy org doc stable reference constants html numpy newaxis我什么时候应该使用它 在一维数组上使用它x产生 gt gt gt
  • 无法比较类型“ndarray(dtype=int64)”和“str”

    Example of data that I want to replace 数据具有以下属性 购买 V 高 高 中 低 维持 V 高 高 中 低 门 2 3 4 5 更多 2 4人以上 lug boot 小 中 大 安全性低 中高 这就是

随机推荐

  • 基于CNN-LSTM数据分类:Matlab实现

    基于CNN LSTM数据分类 Matlab实现 在当今的信息时代 数据处理和分类已经成为了不可或缺的技能和工具 其中卷积神经网络 Convolutional Neural Network CNN 和长短时记忆网络 Long Short Te
  • 多少存款才是裸辞的最好姿态?

    朋友小惠上个月裸辞了 前几天见她还意气风发 没想到昨晚就和我说 焦虑来得远比想象中快 她的计划是三个月内找到满意的新工作 满打满算攒了三个月的生活费才踏出裸辞这一步 结果面试了几个公司后 对于能否在三个月内找到满意工作感到极度地焦虑 小惠认
  • [SWPUCTF 2021 新生赛]finalrce

  • tplink 703n lede -17.01 编译过程

    tplink 703n lede 17 01 编译过程 tplink 703n lede 17 01 编译过程 tplink 703n 支持USB扩展 利用其功能可实现挂载硬盘 打印机共享等 网上虽然有些现成的固件 但基于openwrt 1
  • shiro(java安全框架)

    以下都是综合之前的人加上自己的一些小总结 Apache Shiro是一个强大且易用的Java安全框架 执行身份验证 授权 密码学和会话管理 使用Shiro的易于理解的API 您可以快速 轻松地获得任何应用程序 从最小的移动应用程序到最大的网
  • SQL - MySQL回表

    一 回表概念 现象 回表 顾名思义就是回到表中 也就是先通过普通索引 我们自己建的索引不管是单列索引还是联合索引 都称为普通索引 扫描出数据所在的行 再通过行主键ID 取出索引中未包含的数据 所以回表的产生也是需要一定条件的 如果一次索引查
  • 怎么用计算机算ess tss,"ESS、RSS、TSS"分别表示什么?

    回归平方和 ESS 残差平方和 RSS 总体平方和 TSS 1 回归平方和 是反映自变量与因变量之间的相关程度的偏差平方和 用回归方程或回归线来描述变量之间的统计关系时 实验值yi与按回归线预测的值Yi并不一定完全一致 2 残差平方和是在线
  • 通过Android Studio 将yolov5部署到手机端(2023新手最新适用版)

    通过Android Studio 将yolov5部署到手机端 2023新手最新适用版 java17安装 下载java17 Java Downloads Oracle 配置环境变量 这个是我安装后的路径 将这个路径复制 设置环境变量 在系统变
  • Qt技巧:QProcess与外部程序的调用

    项目做到一定阶段 常常须要在原来的project上调用外部程序 Qt为此提供了QProcess类 QProcess可用于完毕启动外部程序 并与之交互通信 一 启动外部程序的两种方式 1 一体式 void QProcess start con
  • NFS服务安装配置(centos7 nfs-utils示例)

    测试机器 nps server 10 166 205 104 nfs client 10 166 205 101 server端 安装nfs utils和rpcbind sudo yum install nfs utils rpcbind
  • np.random里让你迷糊的随机数函数到底咋区分(结合tensorflow)

    小测 numpy以下哪个函数不能产生正态分布的随机数 A standard normal B randn C random D normal 从 0 1 范围的标准分布中产生1个随机数 以下哪个numpy函数是错误的 A rand B ra
  • Sort 【HDU - 5884】【哈夫曼树】

    题目链接 一开始看到题的时候 竟然读成了是按照升序排序的一串数 害得我WA了两发 还以为是补0补错了 研究了一会补0发现好像没有多大问题 然后就继续了 直到再看了遍题 发现好像是没有给你拍好序的 然后AC 这道题其实哈夫曼树不难 就是补0思
  • 【信创】麒麟操作系统配置在线源及手动查找所需软件包

    获取操作系统信息 命令 nkvers 关注倒数第2行 示例中大版本 V10 小版本 SP2 CPU架构 aarch64 root localhost nkvers Kylin Linux Version Release Kylin Linu
  • ThreadLocal原理以及其安全问题

    ThreadLocal 是一个线程内共享数据的类 其原理是在线程有一个 ThreadLocalMap key是ThreadLocal对象 value是自定义的数据 所以在同一个线程中 用同一个threadlocal去get数据 能取到同样的
  • ansible 离线部署

    1 安装 python 环境 wget https mirrors bfsu edu cn anaconda archive Anaconda3 2022 10 Linux x86 64 sh sh Anaconda3 2022 10 Li
  • VUE+echart绘制地图(伪3D)

    这里以宝鸡地图为示例 其他地图只需更换地图JSON 地图JSON获取通过阿里的datav 地址 阿里云地图获取工具 和data数值即可 效果图如下 首先我们需要创建一个div来盛放地图 这里的div必须给出对应的宽和高 不然地图无法显示 t
  • JavaSE核心API

    还在更新中 没有JavaSE基础的小伙伴可以先看看这篇哦 写的非常的详细 Java语言基础 文章目录 API介绍以及文档的使用 文档注释的规范 Javadoc生成项目文档 String的介绍 重写equals方法 字符串常量池 String
  • 帮你快速理解什么是MFC(Windows环境下)

    我是荔园微风 作为一名在IT界整整25年的老兵 今天总结一下Windows环境下的MFC到底是一个什么技术 早在1998年 MFC绝对是技术界的一个热门名词 现在似乎提的人很少 但其他MFC的很多程序仍在世界上各个角落运行着 做为一名系统架
  • 静态测试 vs 动态测试

    静态测试 静态测试又可分为代码走查 Walkthrough 代码审查 Inspection 技术评审 Review 代码走查 Walkthrough 开发组内部进行的 采用讲解 讨论和模拟运行的方式进行的查找错误的活动 代码审查 Inspe
  • (二)Jupyter Notebook, numpy, matplotlib的使用

    笔记 机器学习入门专栏笔记对应jupyternotebook以及封装的各种算法个人笔记 如有错误 感谢指出 机器学习文档类资源 CSDN文库 二 Jupyter Notebook numpy matplotlib的使用 下载anaconda