矩阵分解
more >>越努力 越幸运
创建结构体变量有三种方式,在代码中展示
代码:
1 | #include<iostream> |
作用:将自定义的结构体放入到数组中方便维护
代码:
1 | #include<iostream> |
利用->可以通过结构体指针访问属性
三步:
1.创建学生结构体变量
2.通过指针指向结构体变量
3.通过指针访问结构体变量中的数据,(通过结构体指针 访问结构体中的属性,需要利用”->” )
代码:
1 | #include<iostream> |
作用:结构体中的成员可以是另一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体
代码:
1 | #include<iostream> |
作用:将结构体作为参数向函数中传递
传递的方式有两种:
值传递
地址传递
代码:
1 | #include<iostream> |
总结:如果不想修改主函数里面的值,则用值传递,否则用地址传递
作用:用const来防止误操作
代码:
1 | #include<iostream> |
案例描述
学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下,设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和存放5名学生的数组作为成员,学生的成员有姓名,考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值,最终打印出老师数据以及老师所带学生的数据
代码:
1 | #include<iostream> |
设计一个英雄结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄,通过冒泡排序算法,将数组中的英雄按照年龄进行排序,最终打印排序后的结果
代码:
1 | #include<iostream> |
空指针不是我们申请的空间,不能进行访问
1 | #include<iostream> |
指针变量指向非法的内存空间
1 | int main() |
1.const修饰指针,简称常量指针
特点:指针的指向可以修改,指针指向的值不能修改
2.const修饰常量,简称指针常量
特点:指针的指向不可以修改,指针指向的值可以修改
3.const既修饰指针又修饰常量
特点:指针的指向和指针指向的值都不能修改
代码1.
1 | //1.常量指针 |
代码2.
1 | //2.指针常量 |
代码3.
1 | //3.既修饰指针又修饰常量 |
代码
1 | #include<iostream> |
代码
1 | #include<iostream> |
指针配合函数和数组使用案例
案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
1 | #include<iostream> |
冰墩墩代码来啦
代码
1 | import turtle as t |
代码还有一点没有完善,会继续改进
…….
符号表示
Wab | 代表结点a到结点b的权重 |
---|---|
ya | 代表结点a的输出值 |
Za | 代表结点a的输入值 |
C | 最终的损失函数 |
损失函数
$$
C=\frac{1}{2}errors^2
$$
其中errors是真实值与预测值的差值,目的是为了减少损失,从而调节参数,减少损失。
数据用矩阵表示就是下面这样的
$$
输入数据:
Z_a=\begin{bmatrix}
0.35\
0.9\
\end{bmatrix}
$$
$$
权重:
w_0=\begin{bmatrix}
0.1&0.8\
0.4&0.6\
\end{bmatrix}\
\
权重:
w_1=\begin{bmatrix}
0.3&0.9\
\end{bmatrix}
$$
1.初始化,用小的随机数给各权值和阈值赋初值。
2.读取网络参数和训练样本集。
3.数据处理,可以进行归一化(数据映射到0~1,方便统一处理)。
4.对训练集中每个样本进行计算。
①前向计算隐层、输出层各神经元的输出。
②计算期望输出与网络输出的误差。
③反向计算修正网络权值和阈值。
5.若满足精度要求或其他退出条件,则结束训练,否则转步骤4继续。
6.结果分析与输出。
1 | import numpy as np |
numpy函数
函数格式 | 用途 |
---|---|
np.array() | 定义数组 |
x.shape[0] | 得到矩阵的行数 |
x.shape[1] | 得到矩阵的列数 |
x.reshape(N,-1) | 固定行数,-1表示行数需要计算 |
np.dot(m,n) | m和n两个矩阵的叉乘 |
np.sum() | 求和函数 |
axis=0 | 返回按列相加的一个数组 |
keepdims | 保持原有维度输出 |
np.random.randn(m,n) | 随机生成一个维度位m*n的矩阵(元素大小在(0,1)之间) |
np.zeros(m,n) | 生成一个m*n的元素全为0的矩阵 |
np.maximum(0,H) | 只返回(0,H)中大的元素 |
np.exp(x) | 计算e的x次幂 |
np.arange(N) | 生成数组 |
np.copy() | 函数起名,copy |
np.log(x) | 计算以e位底的x的log值 |
类似于归一化处理,目的是为了使输出的结果更为直观。那么我们能不能使得一系类预测值y变为相应的概率,概率大的就为输出的最终结果呢?当然可以。
简单来说分三步进行:
(1)以e为底对所有元素求指数幂;
(2)将所有指数幂求和;
(3)分别将这些指数幂与该和做商。
这样求出的结果中,一系列的和一定为1,而每个元素可以代表概率值。
1 | import numpy as np |
目的是为了说明运用多态抒写代码的好处
首先我们先用类写一个普通的
代码:
1 | #include<iostream> |
对于普通的代码,我们如果想修改某部分的内容的话,不是很方便,所以下面我们用多态来写
多态的好处:
1.可读性强
2.组织结构清晰
3.对于前期和后期扩展以及维护性高
多态代码:
1 | #include<iostream> |
代码:
1 | #include<iostream> |
代码:
1 | #include<iostream> |