TensorFlow-平面曲线拟合
平面曲线属于非线性函数,至少需要 3 层的神经网络(输入层,隐藏层x1,输出层)来实现,为达到较好的效果,可尝试更多层,下面的例子使用了2层隐藏层,采用最基本的全连接形式,隐藏层的神经元个数没有严格要求,根据实际项目选择,下面例子选用8个。
下面通过代码实现:
引入相关库,定义神经网络层
1234567891011121314import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt# 构造添加一个神经层的函数def add_layer(inputs, in_size, out_size, activation_function=None): Weights = tf.Variable(tf.random_normal([in_size, out_size])) #权重矩阵[列,行] biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 偏置向量[列,行] Wx_plus_b = tf.matmul(inputs, Wei ...
C++数据类型占字节大小分析
概述C++基本数据类型
类型
关键字
布尔型
bool
字符型
char
整型
int
浮点型
float
双浮点型
double
无类型
void
宽字符型
wchar_t
一些基本类型可以使用一个或多个类型修饰符进行修饰:
signed
unsigned
short
long
各数据类型在内存中所占字节的大小随系统的差异而变,可通过sizeof()函数查看,下面直接总结一些基本类型所占字节的大小。
所占字节大小总结
类型
32位系统
64位系统
bool
1
1
char
1
1
short
2
2
int
4
4
long
4
4
double
8
8
float
4
4
*
4
8
注:有的地方说64位系统中long占8字节,不过在我的电脑中实测确是4字节,所以还是要根据实际的硬件及编译器确定到底占用多少!
测试程序几点说明:
signed, unsigned, long和short都隐含了int, 等价于signed int, unsigned int, long int, short ...
LeetCode题解-107. 二叉树的层次遍历 II(树 队列)
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:给定二叉树 [3,9,20,null,null,15,7],
12345 3 / \9 20 / \ 15 7
返回其自底向上的层次遍历为:
12345[ [15,7], [9,20], [3]]
分析树的层次遍历,即一层一层的从左至右扫描每一个元素,题目虽然要求返回自底向上的结果,但扫描时仍可从上至下扫描,存储时倒序存储即可。
vector向量结构通过insert方法可以从前面插入数据,实现倒序存储。当然,如果想要实现正序存储,即题目:[102.二叉树的层次遍历]中的要求,只需将insert改为push_back方式保存结果即可。
queue队列结构为先入先出,将以树的各个节点为根节点的子树依次push入队列,再从队列头依次读出并从vector头部insert进vector中。
实现树的入队过程,可以首先将整棵树放入,读取其根节点后弹出,再将左右子树依次放入,读取根节点后再次弹出,不断循环,直至没有树可以放入队列(左右子树均为空,到达叶子节 ...
LeetCode题解-24. 两两交换链表中的节点(链表 递归)
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 :
1给定 1->2->3->4, 你应该返回 2->1->4->3.
分析采用递归的思想,先交换前两个节点,再交换接着的两个节点,依次类推,交换完成后将所有的两两部分连接在一起。
编程的思路交换前两个节点,连接上后面已经交换好的所有部分,后面的部分如何实现交换依然使用同样的方式,也就是通过递归调用来实现。
定义一个节点指针p指向第2个节点,然后将第1个节点的next指向第2节点之后的部分(递归已交换完成的部分),最后将p的next指向原来的第1个节点。注意第2步与第3步的顺序不要反了。
1234 __ p ↙ ↖⇣[head]--→▢--→[_________] ↘———————↗
C++实现1234567891011121314151617181920212223/** * Definition for singly-linked list. * struct ListNode & ...
LeetCode题解-19. 删除链表的倒数第N个节点(链表 双指针)
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例 :
123给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明 :
1给定的 n 保证是有效的。
进阶 :
1你能尝试使用一趟扫描实现吗?
分析一般思路为先用一个指针扫描一遍链表,获取链表长度,然后根据所给的n,再扫描至删除处将节点删除,需要进行两趟扫描,耗时较长。
可以借助两个指针,一趟扫描实现节点删除,思路如下:
在链表的最前面添加一个哑节点(虚拟节点、哨兵节点)dummy,用于处理单个元素链表的特殊情况。
新建两个指针p和q,初始都位于最前端新添加的哑节点处,然后p先移动n步,之后p与q同步移动,直至p到达链表末尾,此时q的下一个节点刚好是需要删除的节点,直接修改q的next指向next的next即可。
123456789101112131415qp↓↓▢->1->2->3->[4]->5q p↓ ↓▢->1->2-> ...
LeetCode题解-43.字符串相乘(双层循环 进位)
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
12输入: num1 = "2", num2 = "3"输出: "6"
示例 2:
12输入: num1 = "123", num2 = "456"输出: "56088"
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
分析两数相乘,假设A有n1位,B有n2位,则乘积结果为n1+n2-1位(最高位无进位)或n1+n2位(最高位有进位),即相乘的结果最多有n1+n2位。
以123与45相乘为例,计算过程实际为错位相乘相加,第2个数的每一位依次与第1个数的每一位错位相乘,再将相乘的结果相加,编程实现就是使用两层for循 ...
LeetCode题解-2.两数相加(链表 进位)
题目给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 :
123输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807
分析两个链表以及相加结果均为逆序存储方式(低位在链表前),利于从前到后计算结果,通过一个while循环不断计算每位的相加结果,循环退出条件为所有数都计算完毕。
每次计算的中间结果用一个临时变量保存,并计算对10的取余值和进位值,将该位结果保存到新建的链表中。
最后一步可能会有进位值(进位值只能是1)需单独添加。
C++实现12345678910111213141516171819202122232425262728293031323334/** * Definition for singly-linked list. * struct ListNo ...
Markdown常用语法
各级标题【示例】:
123# 这是一级标题## 这是二级标题### 这是三级标题
【效果】:
这是一级标题这是二级标题这是三级标题
字体设置斜体 加粗 删除线 下划线 上下标【示例】:
1234567*这是倾斜的文字***这是加粗的文字*****这是斜体加粗的文字***~~这是加删除线的文字~~<u>带下划线文本(html语法)</u>a<sup>n</sup>A<sub>i</sub>
【效果】:
这是倾斜的文字这是加粗的文字这是斜体加粗的文字这是加删除线的文字带下划线文本(html语法)
anAi
字体 字号 颜色(html语法)【示例】:
1234<font face="微软雅黑">我是微软雅黑</font><font face="STCAIYUN">我是华文彩云</font><font color=#ff0000 size=3 face="黑体">黑体+红色+ ...
C++多线程笔记(一)
join & detachjoin和detach为最基本的用法,join可以使主线程(main函数)等待子线程(自定义的function_1函数)完成后再退出程序,而detach可以使子线程与主线程毫无关联的独立运行,当主线程执行完毕后直接退出程序,不管子线程是否执行完毕。
123456789101112131415161718192021222324252627#include<iostream>#include<thread>using namespace std;// 子线程函数void function_1(){ for(int i=10;i>0;i--) // 循环10次输出 cout << "=============Hello=============" << endl;}int main(){ thread t1(function_1);//线程开始 //t1.join();//方式1:结合(等待其完成) t1.detach();//方式2:分离(使其自 ...
Linux常用命令
文件/目录类注:目录或称文件夹。
新建文件1touch xxxfile
新建xxxfile文件。
新建目录1mkdir xxxdir
新建xxxdir目录
mkdir /home/workdir 在/home目录下创建workdir目录。
mkdir -p /home/workdir/dir1/dir2 连续创建,若中间目录不存在则强制创建。
查看文件/目录1ls
显示当前目录中的文件与目录(不包含隐藏文件)。
ls -a 可以显示隐藏文件。
ls -l 显示详细信息。
ls -al 包含-a和-l的功能。
查看目录大小1du
du /bin 查看bin目录大小。
查看当前路径1pwd
显示当前工作目录的绝对路径。
改变工作目录1cd xxx
cd /home 进入home目录。
cd - 回退到上一次的目录。
cd .. 回到上一级。
cd ../.. 连退两级。
复制文件1cp xxx xxx
cp /home/test /tmp/ 将/home文件夹下的test文件复制到/tmp目录下。
cp -r /home/dir1 /tmp/ 将/hom ...