空间数据

机器学习笔记-----01绪论

六眼飞鱼酱① 提交于 2020-03-13 00:41:42
1.1 引言 生活中,我们经常会运用经验做出一些预判,比如小时候看见蚂蚁搬家就会推测即将下雨,晚上星空璀璨的话第二天一般都会阳光普照......这些都是我们人类利用自己的经验来完成的,那么这份工作计算机可以做吗? 机器学习正是这样一门学科,它致力于研究如何通过计算的手段,利用经验来改善系统自身的性能,且在计算机系统中,“经验”通常是以“数据”的形式存在的。 机器学习的主要内容,是关于在计算机上从数据中产生“模型(model)”的算法,即学习算法(learning algorithm)。 PS:如果说计算机科学是研究关于“算法”的学问,那么类似的,可以说机器学习是研究“关于算法”的学问。 学习算法的作用: 1.基于提供的经验数据产生 模型 ; 2.面对新情况时, 模型 可提供相应的判断。 模型: 泛指从数据中学得的结果。 学习器: 学习算法在给定数据和参数空间上的实例化。 1997年,Mitchell给出了一个更形象化的定义:假设用P来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验E在T中任务上获得了性能改善,则我们就说关于T和P,该程序对E进行了学习。 1.2 基本术语 数据集(data set):数据记录的集合 示例(instance)/样本(sample):数据集中的每条记录,即关于一个事件或对象的描述(有时整个数据集也称为一个“样本”) 特征向量(feature

8086汇编 CPU内存交互

吃可爱长大的小学妹 提交于 2020-03-10 13:37:19
8086汇编 计算机传输详解 基础了解 一、计算机存储单元   计算机数据可以被存储在内存与磁盘中,对于计算机来说他们不同的数据有着不同的含义,他们可以被分为指令与数据,而这些存储在计算机的数据都会有着固定的大小,根据计算机的存储单元来决定。 数据量:B、KB、MB、GB、TB... 存储单元: https://www.cnblogs.com/xiangsikai/p/9468131.html 二、计算机内存存储   计算机对于数据都是采取二进制的方式存储,而对于CPU管理,数据主要以十六进制补码的方式存储在内存中,方便管理及使用。在汇编语言里不同的进制会采用字母表示(例1)。在存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号,内存地址为16进制表示(例2)。 补码: https://www.cnblogs.com/xiangsikai/p/12371424.html 例 1 1000100111011000B (二进制) 89D8H (十六进制) 104730O(八进制) 35288D(十进制) 例2 一个存储器有128个存储单元,编号从0~127。 三、计算机中的总线 1、总线说明 在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。 物理上:一根根导线的集合。 逻辑上划分为: 地址总线、数据总线、控制总线。 2、地址总线 CPU是通过地址总线来指定存储单元的。

Linux系统结构详解(转)

試著忘記壹切 提交于 2020-03-09 12:58:37
Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序 。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图: 系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。 1. 内存管理 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”

一、JVM — Java内存区域

前提是你 提交于 2020-03-09 05:16:11
Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 方法区 2.5.1 方法区和永久代的关系 2.5.2 常用参数 2.5.3 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 2.6 运行时常量池 2.7 直接内存 三 HotSpot 虚拟机对象探秘 3.1 对象的创建 Step1:类加载检查 Step2:分配内存 Step3:初始化零值 Step4:设置对象头 Step5:执行 init 方法 3.2 对象的内存布局 3.3 对象的访问定位 四 重点补充内容 4.1 String 类和常量池 4.2 String s1 = new String("abc");这句话创建了几个字符串对象? 4.3 8 种基本类型的包装类和常量池 参考 Java 内存区域详解 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 String 类和常量池 8 种基本类型的包装类和常量池 一 概述 对于 Java

Java中堆内存和栈内存详解

删除回忆录丶 提交于 2020-03-08 12:59:23
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。 堆内存用于存放由new创建的对象和数组 。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放, 数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因, 实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针! java中内存分配策略及堆和栈的比较    1 内存分配策略  

Java中堆内存和栈内存详解

ぐ巨炮叔叔 提交于 2020-03-08 12:58:49
  Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。   在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。 当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。   堆内存用于存放由new创建的对象和数组。 在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。    引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放 。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放, 数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉 。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针! java中内存分配策略及堆和栈的比较    1

fork函数详解

六月ゝ 毕业季﹏ 提交于 2020-03-08 12:54:06
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子: /* * fork_test.c * version 1 * Created on: 2010-5-29 * Author: wangth */ #include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the

子进程复制了父进程的什么

99封情书 提交于 2020-03-08 12:53:46
如果你对代码段、数据段、栈、堆存放哪些数据还不是很清楚,请先看我写和 Linux 内存管理 。 有时会出现父子进程变量的地址一样,但值不一样。看下面代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> main(){ char str[4]="asd"; pid_t pid=fork(); if(pid==0){ str[0]='b'; printf("子进程中str=%s\n",str); printf("子进程中str指向的首地址:%x\n",(unsigned int)str); } else{ sleep(1); printf("父进程中str=%s\n",str); printf("父进程中str指向的首地址:%x\n",(unsigned int)str); } } 输出: 子进程中str=bsd 子进程中str指向的首地址:bfc224dc 父进程中str=asd 父进程中str指向的首地址:bfc224dc 这里就涉及到物理地址和逻辑地址(或称虚拟地址)的概念。 从逻辑地址到物理地址的映射称为地址重定向。分为: 静态重定向--在程序装入主存时已经完成了逻辑地址到物理地址和变换,在程序执行期间不会再发生改变。 动态重定向--程序执行期间完成

Java内存分配原理

。_饼干妹妹 提交于 2020-03-08 12:41:16
本文将详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 Java内存分配中的栈 在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 Java内存分配中的堆 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是 为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。 引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序 运行到使用 new

java内存分配原理

佐手、 提交于 2020-03-08 12:39:03
一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 Java内存分配中的栈 在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中 为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 Java内存分配中的堆 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以 在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是 为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。 引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序 运行到使用 new 产生数组或者对象的语句所在的代码块之外