num

04 基于神经网络的逻辑回归实现 - 神经网络和深度学习 [Deep Learning Specialization系列]

巧了我就是萌 提交于 2020-03-07 03:11:54
本文是 Deep Learning Specialization 系列课程的第1课《 Neural Networks and Deep Learning 》中Logistic Regression with a Neural Network mindset练习部分的笔记。 在《 02 神经网络 - 神经网络和深度学习 [Deep Learning Specialization系列] 》中,我们了解了神经网络的大部分理论知识。通过该编程实例,我们能构建一个简答的逻辑回归的分类器来识别猫,以复习神经网路的知识并了解具体的编程实现。 概述 本试验使用的是 h5 格式的数据集,该数据集包含有标注结果的训练数据和测试数据,通过以下7个步骤来完成神经网络的训练和预测: 数据加载 数据处理 参数初始化 逻辑回归函数的实现(正向传播) 损失/代价函数的实现(正向传播) 梯度递减算法的实现(反向传播) 预测 1. 数据加载 h5 格式的数据的读取是通过 h5py 库来实现的,简单的介绍可以参考我的上一篇文章《 h5py - HDF5 for Python的简单入门 》。 首先构建一个 load_dataset() 函数来完成数据的加载,该函数通过 h5py.File() 函数来读取 h5 格式的数据文件,将训练数据和测试数据做一个简单处理后,输出 train_set_x_orig , train

CodeForces - 1114C Trailing Loves (or L'oeufs?) (质因子,阶乘分解)

心不动则不痛 提交于 2020-03-06 22:20:49
💄 💄 💄 关于阶乘分解 void solve ( ) { ll n , b ; cin >> n >> b ; //处理出b的所有素因子并记录下次数x,检查该素因子在n!中的幂次y //对所有素因子取一个最小值 vector < pair < ll , ll > > prime ; for ( ll i = 2 ; i * i <= b ; ++ i ) { ll num = 0 ; while ( b % i == 0 ) ++ num , b / = i ; if ( num ) prime . push_back ( make_pair ( i , num ) ) ; } if ( b > 1 ) prime . push_back ( make_pair ( b , 1 ) ) ; ll ans = 1ll << 60 ; for ( auto x : prime ) { ll nn = n , sum = 0 ; while ( nn ) { sum + = ( nn / x . first ) ; nn / = x . first ; } ans = min ( ans , sum / x . second ) ; } cout << ans << endl ; } signed main ( ) { int T = 1 ; while ( T -- ) solve

Python掷骰子小游戏

…衆ロ難τιáo~ 提交于 2020-03-06 20:55:48
#导入random模块 import random #定义一个生成随机数字的函数 def roll ( sides = 6 ) : num_rolled = random . randint ( 1 , 6 ) #num_rolled = random.randrange(1,6,1)也可以 return num_rolled #与用户进行交互的函数 def main ( ) : sides = 6 stop = False while not stop : user_in = input ( "试试看?回车=继续游戏 Q=退出" ) print ( user_in ) if user_in == "Q" or user_in == "q" : stop = True else : num_rolled = roll ( ) print ( "你掷的%d点" % num_rolled ) print ( "欢迎下次再来!" ) if __name__ == '__main__' : main ( ) 来源: CSDN 作者: 茶哩 链接: https://blog.csdn.net/Zsusan7/article/details/104698452

Python——函数的几种形式还有多值递归拆包操作

故事扮演 提交于 2020-03-06 20:55:45
一、函数的几种形式 1. 函数根据有没有参数和 返回值,可以组合成下面的四组 - 无参,无值 - 无参,有值 - 有参,有值 - 有参,无值 2.那么我们到底给那种呢? 我给出了如下的总结: 2.1 无参数,无返回值 此类函数,不接收参数,也没有返回值,应用场景如下: 只是单纯地做一件事情 ,例如 显示菜单 在函数内部 针对全局变量进行操作 ,例如: 新建名片 ,最终结果 记录在全局变量 中 注意: 如果全局变量的数据类型是一个 可变类型 ,在函数内部可以使用 方法 修改全局变量的内容 —— 变量的引用不会改变 在函数内部, 使用赋值语句 才会 修改变量的引用 2.2 无参数,有返回值 此类函数,不接收参数,但是有返回值,应用场景如下: 采集数据,例如 温度计 ,返回结果就是当前的温度,而不需要传递任何的参数 1.3 有参数,无返回值 此类函数,接收参数,没有返回值,应用场景如下: 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据 例如 名片管理系统 针对 找到的名片 做 修改 、 删除 操作 2.4 有参数,有返回值 此类函数,接收参数,同时有返回值,应用场景如下: 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据 ,并且 返回期望的处理结果 例如 名片管理系统 使用 字典默认值 和 提示信息 提示用户输入内容 如果输入,返回输入内容 如果没有输入

题解 SP2916 【GSS5 - Can you answer these queries V】

£可爱£侵袭症+ 提交于 2020-03-06 18:11:58
前言 最近沉迷于数据结构,感觉数据结构很有意思。 正文 分析 先来分类讨论一下 1. \(x2<y1\) 如果 \(y1<x2\) 的话,答案 \(=\max \limits_{ y1 \leq x \leq y2} \{ s_i \} - \min \limits_{x1 \leq x \leq x2} \{ s_i \}\) 其中 \(s_i\) 表示 \(\sum\limits_{j=1}^{i} a_j\) ,就是俗称的前缀和 这个东西可以用线段树维护。 2. \(x2>=y1\) 这个怎么处理呢 答案 \(=\) \(\max \begin{cases}\max \limits_{ y1 \leq x \leq y2} \{ s_i \} - \min \limits_{x1 \leq x \leq y1} \{ s_i \}\\ \max \limits_{ x2 \leq x \leq y2} \{ s_i \} - \min \limits_{x1 \leq x \leq x2} \{ s_i \}\\ f(x,y)\end{cases}\) 这里的 \(f\) 函数就是最大子段和。 不会用线段树求最大子段和的可以看 这里 最上面的 \(2\) 个也是可以用线段树来维护的。 代码 最后要注意的一点是前缀和 ,我们知道区间 \([i,j]\) 的和 $ = s_j-s

LeetCode 295. Find Median from Data Stream(multiset,heap)

狂风中的少年 提交于 2020-03-06 18:11:26
题目 题意:有n个操作,存入数字,和输出中位数 题解:要确保输入数字的操作和输出中位数的操作,都是低于等于Log(n)的效率。 那么怎么做呢?我们维护两个multiset ,内部是一棵红黑树。一个树A 维护的是较大值,树B维护的是较小值。A,B平分秋色。 中位数显然就是A里的最小值和B里的最大值中选择。那么在存数字的时候判断这个数字应该放到哪个树里,然后再需要判断A,B的元素数量差,如果出现差值大于1,就要把较多的那个树的某个极值元素放到较小的那个树里,始终保持两个树的元素数量差不超过1,所以存入数字的效率是O(logn*3) 而取中位数是O(1)的效率 不知道为什么multiset的size()函数,会超时,难道是O(n)的效率取size吗?介绍里明明是constant的时间复杂度啊。 用优先队列也可以的。效率是一样的。 class MedianFinder { public: /** initialize your data structure here. */ multiset<int> m1; multiset<int> m2; int n=0; int len1; int len2; MedianFinder() { m1.clear(); m2.clear(); len1=0; len2=0; } void addNum(int num) { if(len1==0&

剑指offer 64.滑动窗口的最大值

為{幸葍}努か 提交于 2020-03-06 17:37:37
剑指offer 64.滑动窗口的最大值 题目 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。 思路 如果不考虑复杂度的话,直接加一个内循环重新搜索即可。 这里采用双端队列,可以在前后删除,插入的时候从后方比较,如果一个数比新的数小,那么直接删除,如果比新的数大,若超出范围就删除,未超出就无视。 代码 public ArrayList<Integer> maxInWindows(int[] num, int size) { ArrayList<Integer> ans = new ArrayList<>(); if (num == null) { return ans; } if (num.length < size || size < 1) { return ans; } LinkedList<Integer>

数值方法完全主元素消元法解线性方程组

瘦欲@ 提交于 2020-03-06 16:28:35
原题排序成这样就行了 本程序是排成这样,和列主元素方法结合一下 import java . util . Scanner ; public class Gauss { static final int MAXN = 20 ; static double a [ ] [ ] = new double [ MAXN ] [ MAXN ] ; static double b [ ] [ ] = new double [ 2 ] [ MAXN ] ; //我想多了,这里用一维数组就好 static int num ; static int x_max ; static int y_max ; public static void main ( String [ ] args ) { System . out . println ( "输入未知数个数:" ) ; Scanner sc = new Scanner ( System . in ) ; num = sc . nextInt ( ) ; System . out . println ( "输入用矩阵表示的线性方程组:" ) ; for ( int i = 0 ; i < num ; i ++ ) { //输入方程组 for ( int j = 0 ; j <= num ; j ++ ) { a [ i ] [ j ] = sc .

leetcode-12-整数转罗马数字

╄→гoц情女王★ 提交于 2020-03-06 14:59:51
题目描述: 罗马数字包含以下七种字符: I , V , X , L , C , D 和 M 。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII , 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII ,而是 IV 。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX 。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。 示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: C = 100, L = 50, XXX = 30, III = 3. 示例 5:

[leetcode] 12. 整数转罗马数字

自作多情 提交于 2020-03-06 14:58:39
12. 整数转罗马数字 字符串处理,题超级简单,读懂题直接开干就行。 基本思路就是从大往小一点一点的来表示,具体看代码把: class Solution { public: string intToRoman(int num) { string ans = ""; int m = 0; m = num / 1000; for (int i = 0; i < m; i++) { ans += 'M'; } num %= 1000; if (num >= 900) { ans += "CM"; num -= 900; } if (num >= 500) { ans += "D"; num -= 500; } if (num >= 400) { ans += "CD"; num -= 400; } if (num >= 100) { int c = 0; c = num / 100; num %= 100; for (int i = 0; i < c; i++) { ans += 'C'; } } if (num >= 90) { ans += "XC"; num -= 90; } if (num >= 50) { ans += "L"; num -= 50; } if (num >= 40) { ans += "XL"; num -= 40; } if (num >= 10) {