二、线性代数

一、张量

张量表示由一个数值组成的数组,这个数组可能有多个维度

import torch
x = torch.arange(15)
x # tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

1,shape

shape属性可以访问张量的形状

x.shape # torch.Size([15])

2,numel()

numel()函数可以访问张量中元素的总数

x.numel() # 15

3,reshape()

可以调用reshape()函数,改变一个张量的形状而不改变元素数量和元素值

x = x.reshape(3,5)
x
"""
tensor([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14]])
"""

4,使用全0、全1、其他常量或者从特定分布中随机采样的数字

torch.zeros((2, 3, 4))
"""
tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])
"""
torch.ones((2, 3, 4))
"""
tensor([[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]],[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]]])
"""
torch.ones((3,4,5))*8
"""
tensor([[[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.]],[[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.]],[[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.],[8., 8., 8., 8., 8.]]])
"""
torch.randn(3, 4)
"""
tensor([[-2.9078,  0.4283, -0.7296,  0.0575],[-1.3947,  0.5494,  0.9782, -0.3510],[-0.2191, -3.2434, -1.6111,  2.0091]])
"""

5,为所需张量中的每个元素赋予确定值

通过提供包含数值的 Python 列表(或嵌套列表)来为所需张量中的每个元素赋予确定值

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
"""
tensor([[2, 1, 4, 3],[1, 2, 3, 4],[4, 3, 2, 1]])
"""

6,标准算术运算

+、-、*、/、**、^

a1 = torch.tensor([1,2,4,8],dtype=torch.float32)
a2 = torch.tensor([2,2,2,2])
a1 + a2, a1 - a2, a1 * a2, a1 / a2, a1 ** a2 , torch.exp(a2)
"""
(tensor([ 3.,  4.,  6., 10.]),tensor([-1.,  0.,  2.,  6.]),tensor([ 2.,  4.,  8., 16.]),tensor([0.5000, 1.0000, 2.0000, 4.0000]),tensor([ 1.,  4., 16., 64.]),tensor([7.3891, 7.3891, 7.3891, 7.3891]))"""

7,cat()

可以调用cat()函数,把多个张量连结(concatenate)在一起
dim=0张量连接
dim=1张量连接

X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
X, Y, torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
"""
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]]),tensor([[2., 1., 4., 3.],[1., 2., 3., 4.],[4., 3., 2., 1.]]),tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[ 2.,  1.,  4.,  3.],[ 1.,  2.,  3.,  4.],[ 4.,  3.,  2.,  1.]]),tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],[ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],[ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))
"""

8,sum()

对张量中的所有元素进行求和,产生一个只有一个元素的张量

X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
X, X.sum()
"""
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]]),tensor(66.))
"""

9,广播机制

即使形状不同,仍然可以通过调用广播机制(broadcasting mechanism)来执行按元素操作
例如:a和b形状不同,相加不报错,为啥捏?系统会通过广播机制将a和b自动扩充,进行相加

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b, a + b
"""
(tensor([[0],[1],[2]]),tensor([[0, 1]]),tensor([[0, 1],[1, 2],[2, 3]]))
"""

在这里插入图片描述

10,内存分配

Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(id(Y))
Y = Y + X
print(id(Y))
"""
1426209183608
1426209185448
"""
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
Z = torch.zeros_like(Y)
print(id(Z))
Z = X + Y
print(id(Z))
"""
1426207453976
1426198282056
"""

如果在后续计算中没有重复使用 X,可以使用 X[:] = X + YX += Y 来减少操作的内存开销

Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(id(Y))
Y += X
print(id(Y))
"""
1426209185608
1426209185608
"""
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
Z = torch.zeros_like(Y)
print(id(Z))
Z[:] = X + Y
print(id(Z))
"""
1426198282056
1426198282056
"""

11,NumPy张量

X = torch.arange(12, dtype=torch.float32).reshape((3, 4))
A = X.numpy()
B = torch.tensor(A)
type(X), type(A), type(B)
"""
(torch.Tensor, numpy.ndarray, torch.Tensor)
"""

12,Python 标量

a = torch.tensor([3.5])
a, a.item(), float(a), int(a)
"""
(tensor([3.5000]), 3.5, 3.5, 3)
"""

二、数据预处理

1,创建数据集

首先创建一个人工数据集,并存储在CSV(逗号分隔值)文件 ../data/beyond.csv

import osos.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n')  # 列名f.write('NA,Pave,127500\n')  # 每行表示一个数据样本f.write('2,NA,106000\n')f.write('4,NA,178100\n')f.write('NA,NA,140000\n')

在这里插入图片描述
房间数量(“NumRooms”)、巷子类型(“Alley”)、房屋价格(“Price”)
在这里插入图片描述

2,加载原始数据集

导入pandas包并调用read_csv函数
“NaN”项代表缺失值

import pandas as pddata = pd.read_csv(data_file)
print(data)
"""NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000
"""

3,处理缺失值

为了处理缺失的数据,典型的方法包括插值法删除法
插值法用一个替代值弥补缺失值
删除法则直接忽略缺失值

在这里,考虑插值法
通过位置索引iloc,将data分成inputs和outputs, 其中前者为data的前两列,而后者为data的最后一列

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs, outputs
"""
(   NumRooms Alley0       NaN  Pave1       2.0   NaN2       4.0   NaN3       NaN   NaN,0    1275001    1060002    1781003    140000Name: Price, dtype: int64)
"""

对于inputs中缺少的数值,用同一列的均值替换“NaN”项

inputs = inputs.fillna(inputs.mean())
print(inputs)
"""NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
"""

对于inputs中的类别值或离散值,将“NaN”视为一个类别。
由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”, pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。
巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。
缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1。

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
"""NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1
"""

4,转换为张量格式

import torchx, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
x, y
"""
(tensor([[3., 1., 0.],[2., 0., 1.],[4., 0., 1.],[3., 0., 1.]], dtype=torch.float64),tensor([127500, 106000, 178100, 140000]))
"""

三、线性代数

1,标量

标量由只有一个元素的张量表示

from mxnet import np, npx
import torchnpx.set_np()x = np.array(3.0)
y = np.array(2.0)x + y, x * y, x / y, x ** y
"""
(array(5.), array(6.), array(1.5), array(9.))
"""

2,向量

可以将向量视为标量值组成的列表,这些标量值称为向量的元素(element)或分量(component)

通过一维张量处理向量

x = torch.arange(4)
x
"""
x = torch.arange(4)
x
1
x = torch.arange(4)
2
x
tensor([0, 1, 2, 3])
"""

使用下标来引用向量的任一元素

x[2]
"""
tensor(2)
"""
2.1,len()

通过调用Python的内置len()函数来访问张量的长度

len(x)
"""
4
"""
2.2,shape

当用张量表示一个向量(只有一个轴)时,可以通过.shape属性访问向量的长度
形状(shape)是一个元素组,列出了张量沿每个轴的长度(维数)
对于只有一个轴的张量,形状只有一个元素。

x.shape
"""
torch.Size([4])
"""

向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量。
然而,张量的维度用来表示张量具有的轴数。
在这个意义上,张量的某个轴的维数就是这个轴的长度。

3,矩阵

矩阵,在代码中表示为具有两个轴的张量。

指定两个分量和来创建一个形状为m×n的矩阵

A = torch.arange(20).reshape(5, 4)
A
"""
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19]])
"""

矩阵的转置T

A.T
"""
tensor([[ 0,  4,  8, 12, 16],[ 1,  5,  9, 13, 17],[ 2,  6, 10, 14, 18],[ 3,  7, 11, 15, 19]])
"""

4,张量

向量是标量的推广,矩阵是向量的推广
向量是一阶张量,矩阵是二阶张量
张量用特殊字体的大写字母表示(例如:X、Y、Z)

X = torch.arange(24).reshape(2, 3, 4)
X
"""
tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]])
"""

5,张量算法的基本性质

将两个相同形状的矩阵相加,会在这两个矩阵上执行元素加法

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()  # 通过分配新内存,将A的一个副本分配给B
A, A + B
"""
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]),tensor([[ 0.,  2.,  4.,  6.],[ 8., 10., 12., 14.],[16., 18., 20., 22.],[24., 26., 28., 30.],[32., 34., 36., 38.]]))
"""

两个矩阵的按元素乘法称为Hadamard积(Hadamard product)
即,对应元素相乘

A * B
"""
tensor([[  0.,   1.,   4.,   9.],[ 16.,  25.,  36.,  49.],[ 64.,  81., 100., 121.],[144., 169., 196., 225.],[256., 289., 324., 361.]])
"""

将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。

a = 2
X = torch.arange(24).reshape(2, 3, 4)
X, a + X, (a * X).shape
"""
(tensor([[[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]],[[12, 13, 14, 15],[16, 17, 18, 19],[20, 21, 22, 23]]]),tensor([[[ 2,  3,  4,  5],[ 6,  7,  8,  9],[10, 11, 12, 13]],[[14, 15, 16, 17],[18, 19, 20, 21],[22, 23, 24, 25]]]),torch.Size([2, 3, 4]))"""

6,降维

6.1,sum()

计算任意张量元素的和

x = torch.arange(5, dtype=torch.float32)
x, x.sum()
"""
(tensor([0., 1., 2., 3., 4.]), tensor(10.))
"""

也可以表示任意形状张量的元素和

A = torch.arange(6).reshape(2, 3)
A, A.shape, A.sum()
"""
(tensor([[0, 1, 2],[3, 4, 5]]),torch.Size([2, 3]),tensor(15))
"""

默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量
也可以指定张量沿哪一个轴来通过求和降低维度
axis=0,同一列所在的所有行元素相加
axis=1,同一行所在的所有列元素相加

A_sum_axis0 = A.sum(axis)#同一列所在的所有行元素相加
A_sum_axis0, A_sum_axis0.shape
"""
(tensor([3, 5, 7]), torch.Size([3]))
"""

指定axis=1将通过汇总所有列的元素降维(轴1)
因此,输入轴1的维数在输出形状中消失

A_sum_axis1 = A.sum(axis=1)
A_sum_axis1, A_sum_axis1.shape
"""
(tensor([ 3, 12]), torch.Size([2]))
"""

沿着行和列对矩阵求和,等价于对矩阵的所有元素进行求和

A.sum(axis=[0, 1]), A.sum()
"""
(tensor(15), tensor(15))
"""
6.2,mean()

总和除以元素总数来计算平均值
也可以调用函数来计算任意形状张量的平均值

A = torch.arange(6,dtype=torch.float32).reshape(2, 3)
A, A.mean(), A.sum() / A.numel()
"""
(tensor([[0., 1., 2.],[3., 4., 5.]]),tensor(2.5000),tensor(2.5000))
"""

计算平均值的函数也可以沿指定轴降低张量的维度

A.mean(axis=0), A.sum(axis=0) / A.shape[0]
"""
(tensor([1.5000, 2.5000, 3.5000]), tensor([1.5000, 2.5000, 3.5000]))
"""
6.3,非降维求和

调用函数来计算总和或均值时保持轴数不变会很有用
也就是keepdims=True,不会因为axis而把某个维度给去掉,而是置为一

A = torch.arange(6,dtype=torch.float32).reshape(2, 3)
sum_A = A.sum(axis=1, keepdims=True)
A, sum_A
"""
(tensor([[0., 1., 2.],[3., 4., 5.]]),tensor([[ 3.],[12.]]))
"""

keepdims默认为False,axis=1

a = torch.ones((2,5,4))
a.shape # torch.Size([2, 5, 4])
a.sum(axis=1).shape # torch.Size([2, 4])
a.sum(axis=1)
"""
tensor([[5., 5., 5., 5.],[5., 5., 5., 5.]])
"""
a
"""
tensor([[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]],[[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]]])
"""

keepdims默认为True,axis=1

a.sum(axis=1,keepdims=True).shape # torch.Size([2, 1, 4])
a.sum(axis=1,keepdims=True)
"""
tensor([[[5., 5., 5., 5.]],[[5., 5., 5., 5.]]])
"""

keepdims默认为False,axis=[0,2]

a.sum(axis=[0,2]).shape # torch.Size([5])
a.sum(axis=[0,2]) # tensor([8., 8., 8., 8., 8.])

keepdims默认为True,axis=[0,2]

a.sum(axis=[0,2],keepdims=True).shape # torch.Size([1, 5, 1])
a.sum(axis=[0,2],keepdims=True)
"""
tensor([[[8.],[8.],[8.],[8.],[8.]]])
"""

由于sum_A在对每行进行求和后仍保持两个轴,我们可以通过广播将A除以sum_A

A / sum_A
"""
tensor([[0.0000, 0.3333, 0.6667],[0.2500, 0.3333, 0.4167]])
"""
6.4,cumsum()

如果想沿某个轴计算A元素的累积总和, 比如axis=0(按行计算)
可以调用cumsum函数。 此函数不会沿任何轴降低输入张量的维度

A = torch.arange(6,dtype=torch.float32).reshape(2, 3)
A, A.cumsum(axis=0)
"""
(tensor([[0., 1., 2.],[3., 4., 5.]]),tensor([[0., 1., 2.],[3., 5., 7.]]))
"""

7,点积

相同位置的按元素乘积的和
按元素乘法,然后进行求和来表示两个向量的点积

x = torch.arange(4, dtype=torch.float32)
y = torch.tensor([2.0, 1, 4, 3])
x, y, torch.dot(x, y), torch.sum(x * y)
"""
(tensor([0., 1., 2., 3.]), tensor([2., 1., 4., 3.]), tensor(18.), tensor(18.))
"""

8,向量积

矩阵A和向量x调用torch.mv(A, x)时,会执行矩阵-向量积
A的列维数(沿轴1的长度)必须与x的维数(其长度)相同

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
x = torch.arange(4, dtype=torch.float32)
A, x, A.shape, x.shape, torch.mv(A, x)
"""
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]),tensor([0., 1., 2., 3.]),torch.Size([5, 4]),torch.Size([4]),tensor([ 14.,  38.,  62.,  86., 110.]))
"""

9,矩阵乘法

矩阵A和矩阵B调用torch.mm(A, B)时,会执行矩阵乘法操作
前行成后列
A是一个5行4列的矩阵,B是一个4行3列的矩阵,两者相乘后,得到了一个5行3列的矩阵

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = torch.tensor([[2,3,4],[1,5,9],[7,5,3],[4,5,6]],dtype=torch.float32)
A, B, torch.mm(A, B)
"""
(tensor([[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.],[16., 17., 18., 19.]]),tensor([[2., 3., 4.],[1., 5., 9.],[7., 5., 3.],[4., 5., 6.]]),tensor([[ 27.,  30.,  33.],[ 83., 102., 121.],[139., 174., 209.],[195., 246., 297.],[251., 318., 385.]]))
"""

10,范数

一个向量的范数告诉我们一个向量有多大,这里考虑的大小(size)概念不涉及维度,而是分量的大小。

有Lp范数衍生出了L1、L2等范数,这些都是针对的向量
在这里插入图片描述

10.1,L1范数

在这里插入图片描述
L1范数:向量元素的绝对值之和
先通过绝对值函数,然后按元素求和

q = torch.tensor([10.0,14.0])
q, torch.abs(q).sum()
"""
(tensor([10., 14.]), tensor(24.))
"""
10.2,L2范数

在这里插入图片描述
L2范数:向量元素平方和的平方根
norm()函数进行求解

q = torch.tensor([3.0,4.0])
q, torch.norm(q)
"""
(tensor([3., 4.]), tensor(5.))
"""
10.3,Frobenius范数

Frobenius范数:矩阵元素平方和的平方根
norm()函数进行求解
在这里插入图片描述
Frobenius范数满足向量范数的所有性质,它就像是矩阵形向量的L2范数

q = torch.tensor([[1.0,2.0],[3.0,4.0]])
q ,torch.norm(q)
"""
(tensor([[1., 2.],[3., 4.]]),tensor(5.4772))
"""

在深度学习中,经常试图解决优化问题: 最大化分配给观测数据的概率; 最小化预测和真实观测之间的距离。
用向量表示物品(如单词、产品或新闻文章),以便最小化相似项目之间的距离,最大化不同项目之间的距离。
目标,或许是深度学习算法最重要的组成部分(除了数据),通常被表达为范数。

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

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

相关文章

Wordpress prettyPhoto插件跨站脚本漏洞

漏洞名称:Wordpress prettyPhoto插件跨站脚本漏洞CNNVD编号:CNNVD-201311-413发布时间:2013-11-28更新时间:2013-11-28危害等级: 漏洞类型:跨站脚本威胁类型:远程CVE编号: 漏洞来源…

JavaScript学习笔记1

Netscape 公司 DOM模型&#xff0c;层(layer)-用ID标识。 HTML标记页面上的元素&#xff0c; <div id "mydiv">This is my div</div> CSS为这个页面元素定位 #mydiv{ position:absolute; left:320px; top:110px; } JavaScript 访问 (DOM模块不同&#x…

C++ 内存基本构件new [] /delete []的意义、内存泄漏原因、VC下cookie的基本布局

目录一、对new [] delete [] 的理解1、delete的[]遗漏会带来什么影响二、以示例探讨三、cookie的理解一、对new [] delete [] 的理解 new的对象是个array类型的。 Complex* pca new Complex[3]; //唤起三次ctor //无法借由参数给予初值 ... delete[] pca; //唤起3次dtor如下…

01背包怎么不重复_带有重复物品的背包

01背包怎么不重复Problem statement: 问题陈述&#xff1a; Weights and values are given for n items along with the maximum capacity allowed W. What is the maximum value we can achieve if we can pick any weights, any number of times for the total allowed capa…

C++ 内存基本构件 placement new

用法以及编译器解释 placement new 允许我们将object构建于已经分配的内存上。(所以此时必须有个指针指向已经分配好的内存) 没有所谓的placement delete &#xff0c;因为placement new根本没有分配内存. 也有种说法&#xff0c;是将placement new对应的内存释放掉的操作为pl…

二维数组for遍历

<?php$conarray(array(1,高某,A公司,北京市,010,abc),array(2,罗某,B公司,天津市,020,bcd),array(3,冯某,C公司,上海市,021,cdf),array(4,书某,D公司,重庆市,022,dfg));echo <table border"1" width"600" align"center">;echo <cap…

Xcode调试相关小结

一.设置NSZombieEnabled 使用NSZombieEnabled功能,当代码中访问已经释放了内存的地方,会给你下面这样的提示,而不仅仅是EXEC_BAD_ACCESS: 2008-10-03 18:10:39.933 HelloWorld[1026:20b] *** -[GSFont ascender]: message sent to deallocated instance 0x126550 如果要查看上面…

ONGC的完整形式是什么?

ONGC&#xff1a;石油天然气公司 (ONGC: Oil and Natural Gas Corporation) ONGC is an abbreviation of Oil and Natural Gas Corporation. It is an Indian multinational corporation that is one of the leading producers of crude oil and natural gas in India. Its hea…

node 大写_大写Node.js模块

node 大写Today, lets see a third party module that helps us in working with upper-case letters without necessarily typing them in upper-case in our source code. 今天&#xff0c;让我们看一个第三方模块&#xff0c;它可以帮助我们处理大写字母&#xff0c;而不必在…

HDU嵌入式实验课程大作业分析报告

目录作业要求设计原理与思路扩展任务说明课程感受友情链接工程链接作业要求 体能测试记录仪设计 基于课程发放的实验板&#xff0c;设计一个带有计时和数据采集功能的体能测试记录仪。 基本设计内容 功能1&#xff1a;对应1000米体测场景&#xff0c;使用充电宝供电&#x…

html注释引用公共头部_HTML注释和引用

html注释引用公共头部HTML注释 (HTML Comments) To insert a comment in an HTML document, the comment tags are used. The comments are used to provide some information that could be useful for anyone who views the code of the webpage. The comments can be insert…

HDB3码的编码

编码规则 1、源码是1时&#xff0c;暂时不变&#xff1b; 2、连0不超过3个时不变&#xff0c;有4个或以上连0时把每4个0换为取代节&#xff0c;即B00V&#xff1b; 3、确定B是0还是1&#xff1a;第一个B一般取0&#xff0c;若两个取代节之间1的个数为偶&#xff0c;易推得后者…

批量去除文件空格

import osfilepath r"G:\picture" # 文件目录名 allfilepath os.listdir(filepath)for file in allfilepath: # 改目录下的文件名oldpath filepath \\ filenewname file.replace( , ) # 在原先文件名中去除空格&#xff0c;也就是用null替代空格newpath fil…

【DSP复习主要知识点】(大概)

目录第一章1、数字系统对比模拟系统2、冯诺依曼、哈佛架构3、CISC、RISC4、DSP特点5、cpu流水线作用6、DSP芯片优点第二章&#xff1a;DSP芯片结构原理1、ALU&#xff08;算数逻辑运算单元&#xff09;2、累加器A和B3、桶形移位器的功能4、乘法/加法单元5、CPU状态与控制寄存器…

Json转二值图像

Json文件通过labelme进行标识 image路径 G:\PyCharm\workspace\unet_42-master\datasets\label_bz\test\image label路径 G:\PyCharm\workspace\unet_42-master\datasets\label_bz\test\label 待转换路径 G:\PyCharm\workspace\unet_42-master\datasets\label_bz\test\mask …

矩形波傅里叶变换对以及三角波傅里叶变换

时域矩形波->频域sinc 时域三角波->频域sinc^2:

INTERNET的完整形式是什么?

互联网&#xff1a;互联网络 (INTERNET: Interconnected Network) INTERNET is an abbreviation of Interconnected Network of all the Web Servers Worldwide. It is also known as the World Wide Web or in simple terms the Web. INTERNET是全球所有Web服务器的互连网络的…

DMA三种方式以及DMA特点

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 DMA三种方式&#xff1a;数据块传送方式、周期挪用方式、交替访存方式 数据块传送…

界面边框圆角

界面边框圆角的实现方式同样是在res/drawable中定义一个XML文件&#xff0c;corners.xml的代码如下&#xff1a; 1<?xml version"1.0" encoding"utf-8"?>2<shape xmlns:android"http://schemas.android.com/apk/res/android"> 3 …

CGPA的完整形式是什么?

CGPA&#xff1a;累积平均绩点 (CGPA: Cumulative Grade Point Average) CGPA is an abbreviation of Cumulative Grade Point Average. It is a grading system in education. It is used in measuring the overall academic performance average of a student in schools and…