深度学习入门(Python)学习笔记1

news2024/7/4 6:30:28

第1章 Python入门

1.1python是什么

Python是一个简单、易读、易记的编程语言,而且是开源的,可以免费地自由使用。 

使用Python不仅可以写出可读性高的代码,还可以写出性能高(处理速度快)的代码。

再者,在科学领域,特别是在机器学习、数据科学领域,Python也被大量使用。Python除了高性能之外,凭借着NumPy、SciPy等优秀的数值计算、统计分析库,在数据科学领域占有不可动摇的地位。深度学习的框架中也有很多使用Python的场景,比如Caffe、TensorFlow、Chainer、Theano等著名的深度学习框架都提供了Python接口。

1.2 python的安装 

1.2.1 Python版本

Python有Python 2.x和Python 3.x两个版本。如果我们调查一下目前Python的使用情况,会发现除了最新的版本3.x以外,旧的版本2.x仍在被大量使用。因此,在安装Python时,需要慎重选择安装Python的哪个版本。这是因为两个版本之间没有兼容性(严格地讲,是没有“向后兼容性”),也就是说,会发生用Python 3.x写的代码不能被Python 2.x执行的情况。本次使用Python 3.x ,只安装了Python 2.x的读者建议另外安装一下Python 3.x。 

1.2.2 使用的外部库

本书的目标是从零开始实现深度学习。因此,除了NumPy库和Matplotlib库之外,我们极力避免使用外部库。之所以使用这两个库,是因为它们可以有效地促进深度学习的实现。

NumPy是用于数值计算的库,提供了很多高级的数学算法和便利的数组(矩阵)操作方法。本书中将使用这些便利的方法来有效地促进深度学习的实现。

Matplotlib是用来画图的库。使用Matplotlib能将实验结果可视化,并在视觉上确认深度学习运行期间的数据。

1.2.3 Anaconda发行版

Python的安装方法有很多种,本书推荐使用Anaconda这个发行版。发行版集成了必要的库,使用户可以一次性完成安装。

Anaconda是一个侧重于数据分析的发行版,前面说的NumPy、Matplotlib等有助于数据分析的库都包含在其中。如前所述,本书将使用Python 3.x版本,因此Anaconda发行版也要安装3.x的版本。请读者从官方网站下载与自己的操作系统相应的发行版,然后安装。

1.3 Python解释器

完成Python的安装后,要先确认一下Python的版本。打开终端(Windows中的命令行窗口),输入python --version命令,该命令会输出已经安装的Python的版本信息。

如上所示,显示了Python 3.4.1(根据实际安装的版本,版本号可能不同),说明已正确安装了Python 3.x。接着输入python,启动Python解释器。

 Python解释器也被称为“对话模式”,用户能够以和Python对话的方式进行编程。

1.3.1 算术计算

加法或乘法等算术计算,可按如下方式进行。

 *表示乘法,/表示除法,**表示乘方(3**2是3的2次方)。

另外,在Python 2.x中,整数除以整数的结果是整数,比如,7 ÷ 5的结果是1。

但在Python 3.x中,整数除以整数的结果是小数(浮点数)。

1.3.2 数据类型

编程中有数据类型(data type)这一概念。数据类型表示数据的性质,有整数、小数、字符串等类型。Python中的type()函数可以用来查看数据类型。

 根据上面的结果可知,10是int类型(整型),2.718是float类型(浮点型),"hello"是str(字符串)类型。另外,“类型”和“类”这两个词有时用作相同的意思。这里,对于输出结果<class 'int'>,可以将其解释成“10是int类(类型)”。

1.3.3 变量

可以使用x或y等字母定义变量(variable)。此外,可以使用变量进行计算,也可以对变量赋值。

 

 Python是属于“动态类型语言”的编程语言,所谓动态,是指变量的类型是根据情况自动决定的。在上面的例子中,用户并没有明确指出“x的类型是int(整型)”,是Python根据x被初始化为10,从而判断出x的类型为int的。此外,我们也可以看到,整数和小数相乘的结果是小数(数据类型的自动转换)。另外,“#”是注释的意思,它后面的文字会被Python忽略。

1.3.4 列表

除了单一的数值,还可以用列表(数组)汇总数据。

 元素的访问是通过a[0]这样的方式进行的。[]中的数字称为索引(下标),索引从0开始(索引0对应第一个元素)。此外,Python的列表提供了切片(slicing)这一便捷的标记法。使用切片不仅可以访问某个值,还可以访问列表的子列表(部分列表)。

 进行列表的切片时,需要写成a[0:2]这样的形式。a[0:2]用于取出从索引为0的元素到索引为2的元素的前一个元素之间的元素。另外,索引-1对应最后一个元素,-2对应最后一个元素的前一个元素。

1.3.5 字典

列表根据索引,按照0, 1, 2, ...的顺序存储值,而字典则以键值对的形式存储数据。字典就像《新华字典》那样,将单词和它的含义对应着存储起来。

 1.3.6 布尔型

Python中有bool型。bool型取True或False中的一个值。针对bool型的运算符包括and、or和not(针对数值的运算符有+、-、*、/等,根据不同的数据类型使用不同的运算符)。

1.3.7 if语句

根据不同的条件选择不同的处理分支时可以使用if/else语句。

Python中的空白字符具有重要的意义。上面的if语句中,if hungry:下面的语句开头有4个空白字符。它是缩进的意思,表示当前面的条件(if hungry)成立时,此处的代码会被执行。这个缩进也可以用tab表示,Python中推荐使用空白字符。

python使用空白字符表示缩进。一般而言,每缩进一次,使用4个空白字符。

1.3.8 for语句 

进行循环处理时可以使用for语句。

这是输出列表[1, 2, 3]中的元素的例子。

使用for … in … :语句结构,可以按顺序访问列表等数据集合中的各个元素。 

1.3.9 函数

可以将一连串的处理定义成函数(function)。

此外,函数可以取参数。

另外,字符串的拼接可以使用+。

1.4 Python脚本文件

将Python程序保存为文件,然后(集中地)运行这个文件。

1.4.1 保存为文件

打开文本编辑器,新建一个hungry.py的文件。hungry.py只包含下面一行语句。

接着,打开终端(Windows中的命令行窗口),移至hungry.py所在的位置。然后,将hungry.py文件名作为参数,运行python命令。这里假设hungry.py在~/deep-learning-from-scratch/ch01目录下(在本书提供的源代码中,hungry.py文件位于ch01目录下)。

 使用python hungry.py命令就可以执行这个Python程序了。

1.4.2 类

int、str等数据类型是“内置”的数据类型,是Python中一开始就有的数据类型。现在,我们来定义新的类。如果用户自己定义类的话,就可以自己创建数据类型。此外,也可以定义原创的方法(类的函数)和属性。Python中使用class关键字来定义类,类要遵循下述格式(模板)。

这里有一个特殊的init方法,这是进行初始化的方法,也称为构造函数(constructor),只在生成类的实例时被调用一次。此外,在方法的第一个参数中明确地写入表示自身(自身的实例)的self是Python的一个特点。

从终端运行man.py。

这里我们定义了一个新类Man。

上面的例子中,类Man生成了实例(对象)m。类Man的构造函数(初始化方法)会接收参数name,然后用这个参数初始化实例变量self.name。

实例变量是存储在各个实例中的变量。Python中可以像self.name这样,通过在self后面添加属性名来生成或访问实例变量。

1.5 NumPy

1.5.1 导入NumPy

NumPy是外部库。这里所说的“外部”是指不包含在标准版Python中。因此,我们首先要导入NumPy库。

>>> import numpy as np

Python中使用import语句来导入库。通过写成这样的形式,之后NumPy相关的方法均可通过np来调用。

1.5.2 生成NumPy数组

要生成NumPy数组,需要使用np.array()方法。np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)。

1.5.3 NumPy的算术运算

下面是NumPy数组的算术运算的例子。

这里需要注意的是,数组x和数组y的元素个数是相同的(两者均是元素个数为3的一维数组)。当x和y的元素个数相同时,可以对各个元素进行算术运算。如果元素个数不同,程序就会报错,所以元素个数保持一致非常重要。另外,“对应元素的”的英文是element-wise,比如“对应元素的乘法”就是element-wise product。

NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。

1.5.4 NumPy的N维数组

NumPy不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。比如,可以生成如下的二维数组(矩阵)。

这里生成了一个2 × 2的矩阵A。另外,矩阵A的形状可以通过shape查看,矩阵元素的数据类型可以通过dtype查看。

插入小知识:Python中int32和int64的区别

引言

在Python中,整数类型可以表示不同大小的整数值。其中,int64和int32分别表示64位和32位的整数类型。它们之间的区别在于能够表示的整数范围以及所占用的内存空间大小。

在Python中区分int64和int32的流程步骤
步骤描述
步骤1确认Python版本
步骤2导入相应的库
步骤3创建int64和int32整数
步骤4比较int64和int32整数范围

步骤1:确认Python版本

 首先确认使用的python版本。

import sys
print(sys.version)

这段代码将打印出你当前使用的python版本。

步骤2:导入相应的库

在python中,需要导入numpy库来创建int64和int32整数。使用以下代码导入该库:

import numpy as np

步骤3:创建int64和int32整数

接下里使用numpy库来创建int64和int32整数,以下代码展示了如何创建这两种类型的整数:

int64_num = np.int64(100)
int32_num = np.int32(100)

在上述代码中,使用了np.int64()和np.int32()函数来创建int64和int32整数,并将它们赋值给相应的变量。

步骤4:比较int64和int32整数范围

最后,可以使用以下代码比较int64和int32整数的范围:

int64_range = np.iinfo(np.int64)
int32_range = np.iinfo(np.int32)

print("int64范围:",int64_range.min,"到",int64_range.max)
print("int32范围:",int32_range.min,"到",int32_range.max)

使用np.iinfo()函数来获取int64和int32整数的范围,并将其分别赋值给相应的变量。然后,我们使用print()函数来打印出这两种类型整数的范围。

矩阵的算术运算

B = np.array([[3,0],[0,6]])
print(A + B)
print(A * B)

和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算。这也是基于广播的功能。

.

NumPy数组(np.array)可以生成N维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。

1.5.5 广播 

NumPy中,形状不同的数组之间也可以进行运算。之前的例子中,在2×2的矩阵A和标量10之间进行了乘法运算。在这个过程中,如图1-1所示,标量10被扩展成了2 × 2的形状,然后再与矩阵A进行乘法运算。这个巧妙的功能称为广播(broadcast)。

通过下面这个运算再来看一个广播的例子。

在这个运算中,如图1-2所示,一维数组B被“巧妙地”变成了和二位数组A相同的形状,然后再以对应元素的方式进行运算。

综上,因为NumPy有广播功能,所以不同形状的数组之间也可以顺利地进行运算。

1.5.6 访问元素

元素的索引从0开始。对各个元素的访问可按如下方式进行。

import numpy as np
X = np.array([[51,55],[14,19],[0,4]])
print(X)
print(X[0])
print(X[0][1])#(0,1)的元素

#也可以使用for语句访问各个元素。
for row in X:
    print(row)

#Numpy还可以使用数组访问各个元素
X = X.flatten()#将X转换为一维数组
print(X)
print(X[np.array([0,2,4])])#获取索引为0、2 、4的元素

#运用标记法,可以获取满足一定条件的元素。例如,要从x中抽出大于15的元素,可以写成如下形式。
print(X > 15)
print(X[X > 15])
#对NumPy数组使用不等号运算符等(上例中是X > 15),结果会得到一个布尔型的数组。
#上例中就是使用这个布尔型数组取出了数组的各个元素(取出True对应的元素)。

运行结果:

Python等动态类型语言一般比C和C++等静态类型语言(编译型语言)运算速度慢。实际上,如果是运算量大的处理对象,用C/C++写程序更好。为此,当Python中追求性能时,人们会用C/C++来实现处理的内容。Python则承担“中间人”的角色,负责调用那些用C/ C++写的程序。NumPy中,主要的处理也都是通过C或C++实现的。因此,我们可以在不损失性能的情况下,使用Python便利的语法。 

1.6 Matplotlib 

Matplotlib是用于绘制图形的库,使用Matplotlib可以轻松地绘制图形和实现数据的可视化。

1.6.1 绘制简单图形

可以使用matplotlib的pyplot模块绘制图形。如下,绘制sin函数曲线的例子。

import numpy as np
import matplotlib.pyplot as plt

#生成数据
x = np.arange(0,6,0.1) # 以0.1为单位,生成0到6的数据
y = np.sin(x)

#绘制图形
plt.plot(x,y)
plt.show()

这里使用NumPy的arange方法生成了[0,0.1,0.2,...,5.8,5.9]的数据,将其设为x。对x的各个元素,应用NumPy的sin函数np.sin(),将x、y的数据传给plt.plot方法,然后绘制图形。最后,通过plt.show()显示图形。

1.6.2 pyplot的功能

import numpy as np
import matplotlib.pyplot as plt

#生成数据
x = np.arange(0,6,0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)

#绘制图形
plt.plot(x,y1, label="sin")
plt.plot(x,y2, linestyle = "--", label="cos")#用虚线绘制
plt.xlabel("x")#x轴标签
plt.ylabel("y")#y轴标签
plt.title('sin & cos')#标题
plt.legend()
plt.show()

1.6.3 显示图像 

 pyplot中还提供了用于显示图像的方法imshow()。另外,可以使用matplotlob.image模块的imread()方法读入图像。

import matplotlib.pyplot as plt
from matplotlib.image import imread

img = imread('https://img2.baidu.com/it/u=244615067,2117237985&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500')#读入图像(设定合适的路径!
plt.imshow(img)

plt.show()

运行之后出现错误:

ValueError                                Traceback (most recent call last)
Cell In[11], line 4
      1 import matplotlib.pyplot as plt
      2 from matplotlib.image import imread
----> 4 img = imread('https://img2.baidu.com/it/u=244615067,2117237985&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500')#读入图像(设定合适的路径!
      5 plt.imshow(img)
      7 plt.show()

File C:\ProgramData\anaconda3\Lib\site-packages\matplotlib\image.py:1558, in imread(fname, format)
   1554 img_open = (
   1555     PIL.PngImagePlugin.PngImageFile if ext == 'png' else PIL.Image.open)
   1556 if isinstance(fname, str) and len(parse.urlparse(fname).scheme) > 1:
   1557     # Pillow doesn't handle URLs directly.
-> 1558     raise ValueError(
   1559         "Please open the URL for reading and pass the "
   1560         "result to Pillow, e.g. with "
   1561         "``np.array(PIL.Image.open(urllib.request.urlopen(url)))``."
   1562         )
   1563 with img_open(fname) as image:
   1564     return (_pil_png_to_float_array(image)
   1565             if isinstance(image, PIL.PngImagePlugin.PngImageFile) else
   1566             pil_to_array(image))

ValueError: Please open the URL for reading and pass the result to Pillow, e.g. with ``np.array(PIL.Image.open(urllib.request.urlopen(url)))``.

这段代码出现错误的原因是‘imread’函数无法直接从URL中读取图像。根据错误提示,需要先使用'PIL.Image.open(urllib.request.urlopen(url))'来读取URl中的图像,然后将其转换为NumPy数组。

修正后的代码实例:

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import urllib.request

url = 'https://img2.baidu.com/it/u=244615067,2117237985&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500'
response = urllib.request.urlopen(url)
img = Image.open(response)
img_array = np.array(img)

plt.imshow(img_array)
plt.show()

在这里,我导入了‘PIL’库中的‘Image’模块,并使用‘urllib.request.urlopen()’来打开URL,并将其传递给‘Image.open()’来获取图像。然后,将图像转换为NumPy数组,以便能够在Matplotlib中显示,最后,使用‘plt.imshow()’和‘plt.show()’来显示图像。

本章所学的内容

  • python是一种简单易记的编程语言。
  • python是开源的,开源自由使用。
  • python有“解释器”和“脚本文件”两种运行模式。
  • python能够将一系列处理集成为函数或类等模块。
  • NumPy中有很多用于操作多维数组的便捷方法。

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

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

相关文章

司徒理财:8.30黄金原油今日最新行情分析及操作策略

黄金走势分析      从日线形态来看&#xff0c;昨晚经历了快速拉升&#xff0c;价格成功稳定在关键的1924压力位之上&#xff0c;最高甚至触及了1938的高点。这表明市场开启了新一轮走势的空间。在当天的日内交易中&#xff0c;我们应特别关注1925一线作为支撑&#xff0c;…

说说多态,多态有几种类型,怎么实现

多态有两种主要的类型&#xff1a; 静态多态&#xff08;编译时多态&#xff09;和动态多态&#xff08;运行时多态&#xff09;。 1、静态多态&#xff08;编译时多态&#xff09;&#xff1a; 静态多态是指在编译时就确定了对象的类型、方法的调用以及绑定。常见的实现方式是…

RESTful API 面试必问

RESTful API是一种基于 HTTP 协议的 API 设计风格&#xff0c;它提供了一组规范和约束&#xff0c;使得客户端&#xff08;如 Web 应用程序、移动应用等&#xff09;和服务端之间的通信更加清晰、简洁和易于理解。 RESTful API 的设计原则 使用 HTTP 协议&#xff1a;RESTful …

函数和方法回顾、cbv源码分析、APIView执行流程分析、序列化组件介绍、序列化组件快速使用之序列化、常用字段类和参数、序列化组件之校验、字典推导式回顾

一 函数和方法回顾 函数和方法-函数:使用def关键字定义的函数,有几个参数&#xff0c;就要传几个参数&#xff0c;不能多&#xff0c;不能少-----》按位置传&#xff0c;按关键字传-方法&#xff1a;定义在类内部&#xff0c;可以自动传值的函数称之为方法---》绑定给对象的方…

RTPEngine 通过 HTTP 获取指标的方式

文章目录 1.背景介绍2.RTPEngine 支持的 HTTP 请求3.通过 HTTP 请求获取指标的方法3.1 脚本配置3.2 请求方式 1.背景介绍 RTPEngine 是常用的媒体代理服务器&#xff0c;通常被集成到 SIP 代理注册服务器中实现媒体传输的功能以减小 SIP 代理服务器的压力&#xff0c;其架构如…

ChatGPT 一条命令总结Mysql所有知识点

想学习Mysql的同学,可以使用ChatGPT直接总结mysql所有的内容与知识点大纲 输入 总结Mysql数据库所有内容大纲与大纲细分内容 ChatGPT不光生成内容,并且直接完成了思维导图。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Offi…

业务需要咨询?开发遇到 bug 想反馈?开发者在线提单功能上线!

大家是否遇到过下列问题—— 在开发的时候&#xff0c;遇到 bug 需要反馈… 有合作意向的时候&#xff0c;想更多了解业务和相关产品… 在接入的时候&#xff0c;需要得到专业技术支持… 别急&#xff0c;荣耀开发者服务平台在线提单功能上线了~ 处理问题分类说明&#xff1…

mov怎样转成mp4?简单的格式转换方法分享

将mov文件转换为MP4格式的好处是多方面的。首先&#xff0c;MP4格式相对于mov格式拥有更好的压缩效率&#xff0c;可以减小文件大小&#xff0c;从而节省存储空间和传输时间。其次&#xff0c;MP4格式是一种广泛使用的视频格式&#xff0c;几乎所有的设备和平台都支持MP4格式&a…

【跟小嘉学 Rust 编程】二十、进阶扩展

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

没有永远的王者…Zig替代C,将成定局!

新语言的出现&#xff0c;真的能威胁到老牌语言吗&#xff1f;或许&#xff0c;真的没有永远的王者。就像最近春风得意的Mojo&#xff0c;LLVM之父Chris Lattner称其不会威胁到 Python&#xff0c;但会让C等语言感到恐惧。 新语言层出不穷之时&#xff0c;旧语言的中年危机就会…

TSN协议解读系列 | (1) 帧抢占:br老先生的旅途

帧抢占协议还是怀念以前那个车马很慢&#xff0c;书信很远&#xff0c;带宽顶天也就几十兆的年代。 ▎旧时代的辉煌 1983年秋&#xff0c;IEEE 802.3大学正式成立&#xff0c;这所大学遵循的是严格的标准化管理&#xff0c;数据包们的衣食住行都需要符合学校的规定&#xff0…

SpringBoot + layui 框架实现一周免登陆功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

便携式明渠流量计工作原理

便携式明渠流量计工作原理是什么&#xff1f; 简单来说便携式明渠流量计是一种用于测量明渠水流量的仪器。它的工作原理基于流速-水位关系&#xff0c;通过测量水流速度和水位差来计算明渠的流量。 具体原理如下&#xff1a; 1.测量水流速度&#xff1a;通常使用悬挂在水中的水…

Kubernetes快速进阶与实战:构建可靠的容器化应用平台

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 1. 什么是Kubernetes&am…

企业面临的IP风险,如何应对?

IP风险画像为企业或组织在知识产权领域面临的潜在风险和威胁的综合概览。通过对相关知识产权的保护和管理&#xff0c;企业可以预测和应对潜在的法律、商业和声誉风险。 IP数据云帮助企业更好地了解和应对知识产权方面的风险。并提供了关于当前全球知识产权环境的重要信息&…

Yolov8原理详细解析!一文看懂

引言 Yolo(You Only Look Once)是一种one-stage目标检测算法&#xff0c;即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov8是Ultralytics公司最新推出的Yolo系列目标检测算法&#xff0c;可以用于图像分类、物体检测和实例分割等任务。 根据官方描述&…

linux添加sht3x温湿度传感器驱动记录

最近拿到一块imx6ull板子&#xff0c;上面有一颗温湿度传感器sht30,需要读取其数值。本人能力有限&#xff0c;自己写驱动还有一点困难&#xff0c;好在 linux内核里自带了很多器件的驱动&#xff0c;只需要找到相关的驱动文件根据要求修改一下设备树、添加进内核里编译就可以。…

【ES】Elasticsearch 常见的简单查询

查看es中有哪些索引 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200 /_cat/indices?v 参数&#xff1a;无 结果&#xff1a; 查看索引全部数据 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200/index-2023-08/_search 参数&a…

VUE之jspreadsheet电子excel表格实时动态高度设置

问题&#xff1a;excel电子表格在不同屏幕大小下横向滚动条会被遮挡 排查原因&#xff1a;由于excel高度固定导致 解决方法&#xff1a;设计页面较多&#xff0c;所以封装公共方法 步骤&#xff1a; 1.使用混入封装动态设置excel高度方法&#xff1a; const mixinJexcel …

MySQL行格式 又称 记录格式

行格式 ROW_formate compact 行格式dynamic 行格式 默认compress 行格式 行格式定义 创建表同时指定行格式 create table 表明 ( 列的信息) row_formate行格式名称 修改行格式 alter table 表明 ROW_FORMATE 行格式名称 查看mysql8.0 默认行格式 select innodb_default_row_…