运算速度

Numpy的基础知识

我怕爱的太早我们不能终老 提交于 2019-12-26 01:29:05
文章目录 Numerical Python介绍 基础数据结构ndarray数组 为什么引入ndarray数组 ndarray数组和list列表分别完成对每个元素增加1的计算 ndarray数组和list列表分别完成相加计算 如何创建ndarray数组 查看ndarray数组的属性 改变ndarray数组的数据类型和形状 ndarray数组的基本运算 标量和ndarray数组之间的运算 两个ndarray数组之间的运算 ndarray数组的索引和切片 ndarray数组的统计运算 随机数np.random 创建随机ndarray数组 设置随机数种子 随机打乱ndarray数组顺序 随机选取元素 线性代数 Numpy保存和导入文件 Numpy应用举例 Numpy应用举例——计算激活函数 Numpy应用举例——图像翻转和裁剪 课程作业 1 使用numpy计算tanh激活函数 2 统计随机生成矩阵中有多少个元素大于0 Numerical Python介绍 Numpy是Numerical Python的简称,是Python中高性能科学计算和数据分析的基础包。Numpy提供了一个多维数组类型ndarray,它具有矢量算术运算和复杂广播的能力,可以实现快速的计算并且能节省存储空间。在使用Python调用飞桨API完成深度学习任务的过程中,通常会使用Numpy实现数据预处理和一些模型指标的计算

深入理解Java内存模型(JMM和volatile关键词)

柔情痞子 提交于 2019-12-25 13:20:04
目录 •写在前面 •物理机三级缓存 •乱序执行优化 •Java内存模型 •内存间交互操作 •volatile型变量 •先行发生原则 •写在前面 在正式讲解之前呢,我们先来讨论讨论硬件的效率与一致性。这里我们讲讲物理机对并发的处理方案,因为物理机遇到的并发问题与虚拟机中的情况有不少相似之处,所以它的方案对于虚拟机的实现也有相当大的参考意义。如何让计算机并发执行若干个运算任务以及如何更加充分的利用计算机处理器的效能之间,并没有想象的那么简单,其中一个重要的复杂性来源是绝大多数的运算任务都不可能只靠处理器计算就能完成的,处理器至少要与内存交互,如读取运算数据、储存运算结果等,这个I/O操作是很难消除的(无法仅靠寄存器来完成所有运算任务)。由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写。虽然基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性。在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存,看如下图: 当多个处理器的运算任务都涉及同一块主内存区域时

文本文件和二进制文件的区别

会有一股神秘感。 提交于 2019-12-22 00:38:46
文本文件: 文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。 特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。 文本文件是一种由若干行字符构成的 计算机文件 。文本文件存在于计算机文件系统中。通常,通过在文本文件最后一行后放置文件结束标志来指明文件的结束。 文本文件是指一种容器,而纯文本是指一种内容。文本文件可以包含纯文本。 一般来说,计算机文件可以分为两类:文本文件和 二进制文件 。[2] 格式 ASCII ASCII 标准使得 文件 只含有ASCII字符的文本文件可以在 Unix 、 Macintosh 、 Microsoft Windows 、 DOS 和其它 操作系统 之间自由交互,而其它格式的文件是很难做到这一点的。但是,在这些操作系统中,换行符并不相同,处理非ASCII字符的方式也不一致。 MIME 文本文件在MIME标准中的类型为“text/plain”,此外,它通常还附加编码的信息。在Mac OS X出现前,当Resource fork指定某一个文件的类型为“TEXT”时,Mac OS就认为这个文件是文本文件。在Windows中

使用神经网络进行微积分运算

自作多情 提交于 2019-12-21 13:09:54
大家上学时,最头疼的课程是什么呢?对大部分人来说,应该就是 高等数学了吧,比如 什么泰勒公式,微积分等,想想就让人头疼。接下来就是,but.最近FAIR(Facebook AI Research) 又暴雷了,他们使用神经网络训练了一个可以解微积分的model. 并且这个 模型相比之前的Matlab以及Maththematica快不少,并且准确率也高不少。 这个model的准确率基本上是100%,比其他的高出15个百分点。 既然准确率这么高,速度也这么快,那么他们是怎么做的呢?首先model使用的就是大家比较熟知seq2seq结构在这,就是 数据集特别大。还有一点,就是 他们把整个表达式分解成更小的计算单元,也即将表达式按照树的中序遍历来分解,如下所示:比如,一个简单的例子:2 3x(5 2), 就可以写成: 再看一个例子: 接下来,我也不想翻译了(担心加入个人理解不对的地方),大家直接看 原版 吧,考虑到很多人访问不了,我把这篇文章贴到下面了: Here’s a challenge for the mathematically inclined among you. Solve the following differential equation for y: You have 30 seconds. Quick! No dallying. The answer, of

使用多线程的准备知识

旧巷老猫 提交于 2019-12-21 07:21:47
一、为什么要使用多线程? 【使计算机所有资源在执行任务的时候能够全部利用上,以提升计算机资源利用率的方式来提升系统执行效率】   CPU的单核运行速度由于硬件技术问题已经遇到瓶颈,而概念性的“光脑”貌似离我们还很遥远,现在的计算机性能提升方向是向多核发展。多核同时工作,协同完成任务。大家熟知的神威·太湖之光超级计算机总共使用了40960颗处理器,总计拥有10649600颗核心、1.31PB内存。即使是目前市场上的主流家用电脑也一般达到四核心八线程的配置标准。那么对于这些多核的CPU, 在开发软件的时候就不得不考虑如何充分利用上每一个核的性能,以至于使系统运行的效率更高。 二、CPU是执行的是线程任务还是进程任务? 【CPU执行的是线程中定义的任务】 进程是对内存资源的抽象,线程是对执行任务的抽象。 CPU执行的是线程任务 ,和进程没有任何关系。所以, CPU中的核在任意时间点只能执行某一个线程的任务 ,具体执行哪个线程就要看操作系统的任务调度策略。 在单核多线程任务中,操作系统会把CPU资源按照时间片划分,根据线程的优先级选择线程进行执行任 务。 三、 程序中线程的数量控制在核数的1~2倍对吗? 【不对!】 左图为工作时win10 四核八线程 线程数: 2094。右图为闲置centos7 单核 线程数 :127 。 线程数量远远超过CPU核心数量的上百倍 。 所以在开发程序过程中

计算机基础系列一:计算机硬件

 ̄綄美尐妖づ 提交于 2019-12-21 04:41:30
一 为何要学习计算机基础 python是编程语言,即python是语言 语言有英语、法语、葡萄牙语等,但凡是语言,都是用来沟通的介质。 程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质 程序员要想让计算机工作,必须知道计算机能干什么,怎么干的,这也就是我们必须学习计算机基础的原因 然而光有编程语言和硬件也并不能满足大家的编程需求,为什么这么说呢? 程序用编程语言写程序,最终开发出的结果就是一个软件,既然是软件,那就与腾讯qq、暴风影音、快播等软件没有区别了。这些软件必须运行在操作系统之上,你肯定会问:为何要有操作系统呢?没错,远古时代的程序员确实是在没有操作系统的环境下,用编程语言之间操作硬件来编程的,你可能觉得这没有问题,但其实问题是相当严重的,因为此时你必须掌握如何操作硬件的所有具体细节,比如如何具体操作硬盘(现在你得把硬盘拆开,然后你能看见的所有的东西,你都得研究明白,因为你编程时要用到它),这就严重影响了开发的效率,操作系统的出现就是运行于硬件之上,来控制硬件的,我们开发时,只需要调用操作系统为我们提供的简单而优雅的接口就可以了 所以一套完整的计算机系统分为:计算机硬件,操作系统,应用软件,如下图。因而我们的python编程之路分为计算机硬件基础,操作系统基础,和python编程三部分,就让我们先从计算机硬件学起吧 二 本节目标

十大经典排序算法

青春壹個敷衍的年華 提交于 2019-12-21 02:53:29
转自https://blog.csdn.net/hellozhxy/article/details/79911867 0、排序算法说明0.1 排序的定义 对一序列对象根据某个关键字进行排序。 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度:运行完一个程序所需内存的大小。 例子 数据量低时,O(1) 和 O(n^2)的区别可以忽略不计。比如,你有个算法要处理2000条元素。 O(1) 算法会消耗 1 次运算 O(log(n)) 算法会消耗 7 次运算 O(n) 算法会消耗 2000 次运算 O(n*log(n)) 算法会消耗 14,000 次运算 O(n^2) 算法会消耗 4,000,000 次运算 O(1) 和 O(n^2) 的区别似乎很大(4百万),但你最多损失 2 毫秒,只是一眨眼的功夫。确实,当今处理器每秒可处理上亿次的运算。这就是为什么性能和优化在很多IT项目中不是问题。 我说过,面临海量数据的时候,了解这个概念依然很重要。如果这一次算法需要处理 1,000,000 条元素

Java中的位运算

烂漫一生 提交于 2019-12-20 00:29:42
  最近饶有兴致,看了一些java源代码,发现源码里面一些精巧的实现是通过位运算实现的,比如十进制整数转成十六进制形式字符串输出: 1 public static String toHexString(int i) 2 { 3 return toUnsignedString(i, 4); 4 } 5 6 private static String toUnsignedString(int i, int shift) { 7 char[] buf = new char[32]; 8 int charPos = 32; 9 int radix = 1 << shift; 10 int mask = radix - 1; 11 do { 12 buf[--charPos] = digits[i & mask]; 13 i >>>= shift; 14 } while (i != 0); 15 16 return new String(buf, charPos, (32 - charPos)); 17 } 18 19 final static char[] digits = { 20 '0' , '1' , '2' , '3' , '4' , '5' , 21 '6' , '7' , '8' , '9' , 'a' , 'b' , 22 'c' , 'd' , 'e' , 'f' , 'g

数字图像处理总结

隐身守侯 提交于 2019-12-18 18:37:20
为什么要用8个亮度级来描述图像? 模拟摄像机的信噪比约为45dB,每一位是6dB,所以8位可以包括有效范围,选择8位像素的另一个好处是:方便把像素存储成字节;而且,8位的A/D转换器最便宜。 怎么定义合适的图像大小N?即分辨率? N太小导致图像锯齿化严重,N太大会导致存储空间的增大,所以需要选择合适的分辨率对图像进行存储,但是你需要了解数字信号处理理论。 为什么要进行傅里叶变换? 将信号映射到分量频率的方法,频率的单位是Hz,用于度量时间上的重复速率。假设有一个音乐中心:声音来自一个CD播放器,经过扩音处理以后在扬声器上进行播放,扬声器可以改变低音或者高音,低音包含低频分量,高音包含高频分量,扬声器的傅里叶变换就是将时间连续的声音信号转换成频率分量的方法。 为什么要这么做呢?我们没用改变信号,只是改变了信号的表达方式,傅里叶变换表明信号是由什么频率组成的,特定频率的幅度就是原信号中该频率的总量,将所有频率对应的正弦波进行叠加就能得到原图像(理论上)。 傅里叶变换怎么表示? 傅里叶变换得到的结果是复数,所以用幅度和相位来表示,幅度等于实部和虚部的平方和求根,相位等于arctan实部/虚部。 实部和虚部的正负性可以确定相位在哪一个象限,幅度表示每一个频率分量的总量,相位描述的是频率分量产生的时序。 卷积运算怎么和傅里叶变换进行结合?

计算机组成原理复习

旧时模样 提交于 2019-12-17 19:12:30
title: 计算机组成原理复习 date: 2018-06-28 14:08:04 tags: 课程学习 1.计算机硬件包括:输入设备,输出设备,运算器,控制器,存储器 2.计算机软件一般分为两大类:一类应用软件,另一类叫系统软件,操作系统属于系统软件类 3.第一代计算机的逻辑部件采用的是电子管,1946-1957年; 第二代计算机的逻辑部件采用的是晶体管,1958-1964年; 第三代计算机的逻辑部件采用的是中小规模集成电路,1965-1971年; 第四代计算机的逻辑部件采用的是大规模及超大规模集成电路,1972至今 4.计算机系统由硬件系统和软件系统构成。 5.计算机系统的三个层次结构由内到外分别是硬件系统,软件系统和应用软件 6.用高级语言编写的程序称为源 程序,经编译程序或解释程序翻译后称为 目标程序 7.将源程序翻译成目标程序的软件是编译器或编译程序 8.程序设计语言一般分为3类:机器语言,汇编语言,高级语言 9.编译方式是使用编译程序把源程序编译成机器代码的 目标程序 ,并以机器程序 的形式保留 10.简要说明计算机系统的层次结构? 计算机系统具有层次性,它由多级层次结构组成。从功能上计算机系统可分为五个层次级别: 第一级是微程序设计级。这是一个硬件级,它由机器硬件直接执行微指令。 第二级是一般机器级,也称为机器语言级。它由微程序解释机器指令系统.这一级是硬件级。