字节数组

数据分析之numpy

好久不见. 提交于 2019-11-29 14:46:34
一、NumPy Ndarray 对象 NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 ndarray 对象是用于存放同类型元素的多维数组。 ndarray 中的每个元素在内存中都有相同存储大小的区域。 ndarray 内部由以下内容组成: 一个指向数据(内存或内存映射文件中的一块数据)的指针。 数据类型或 dtype,描述在数组中的固定大小值的格子。 一个表示数组形状(shape)的元组,表示各维度大小的元组。 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。 numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) """ object 数组或嵌套的数列 dtype 数组元素的数据类型,可选 copy 对象是否需要复制,可选 order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) subok 默认返回一个与基类类型一致的数组 ndmin 指定生成数组的最小维度 """ View Code 二、Numpy数据类型 numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上

指针详解

戏子无情 提交于 2019-11-29 09:57:45
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整型变量 int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针 int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组 int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组 int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P

深入剖析PHP7内核源码(二)- PHP变量容器

試著忘記壹切 提交于 2019-11-29 03:31:01
简介 PHP的变量使用起来非常方便,其基本结构是底层实现的zval,PHP7采用了全新的zval,由此带来了非常大的性能提升,本文重点分析PHP7的zval的改变。 PHP5时代的ZVAL typedef struct _zval_struct { zvalue_value value; // (长度16字节,具体看下面的分析) zend_uint refcount__gc; // unsigned int (长度4字节) zend_uchar type; // unsigned char (长度1字节) zend_uchar is_ref__gc; // unsigned char (长度1字节) } zval typedef union _zvalue_value { long lval; // 用于 bool 类型、整型和资源类型(长度8字节) double dval; // 用于浮点类型(长度8字节) struct { // 用于字符串 char *val; // 字符串指针(长度8字节) int len; //字符串长度(长度4字节) } str; HashTable *ht; // 用于数组(长度8字节) zend_object_value obj; // 用于对象(12字节) zend_ast *ast; // 用于常量表达式(长度8字节) } zvalue

JavaScript之ArrayBuffer

你。 提交于 2019-11-29 00:50:08
在写作这篇博客的时候,参照了下面三篇博客: https://www.cnblogs.com/jixiaohua/p/10714662.html (写的很详细,参照比较多) https://www.cnblogs.com/copperhaze/p/6149041.html https://zh.javascript.info/arraybuffer-binary-arrays 文章中有一些内容是直接从上面博客复制过来的,并不是想要抄袭,只是觉得写博客可以增加理解度,别切可以避免遗忘。在此感谢上面三位博主的文章。 DataView部分完全复制上面第一个链接的博客。 ArrauBuffer对象、TypedArray视图和DataView视图是JavaScript中**专门操作二进制数据的接口**。他们都是以数组的方式操作二进制数组,所以被称为二进制数组。最初为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式的背景下诞生的。 一.ArrayBuffer相关介绍 ArrayBuffer指的是一段连续的内存区域。 let buffer = new ArrayBuffer(40); // 在内存中开辟40个字节长度的内存区域 alert(buffer.byteLength); // 40 1

Python:struct模块的pack、unpack

空扰寡人 提交于 2019-11-29 00:18:40
问题21:如何处理二进制文件 一、二进制文件的结构 1、结构:头部信息 + 数据;  头部信息:是对这个文件是结构的介绍信息,相当于书本的目录;  数据:文件各个结构的具体信息,相当于书本的内容; 2、打开二进制文件   例:f = open(path, 'rb'):以只读形式打开指定文件; 3、读取文件:f.read(size),读取的文件内容为字节;如:\x10\x00\x00\x01\x02\x0D等,一个\x10代表一个字节; 4、解析读取的字节数据:struct模块下的unpack方法(更多参见: Python:struct模块的pack、unpack ) #格式:struct.unpack('数据类型', f.read(size)) #数据类型:如下表,struct.unpack('h', f.read(size)),表示解析成short类型;'i',表示解析成int类型; #f.read():表示需要被解析的字节类型的数据; #struct 类型表 Format C Type Python type Standard size Notes x pad byte no value c char string of length 1 1 b signed char integer 1 (3) B unsigned char integer 1 (3) ? _Bool

数字图像处理2

六眼飞鱼酱① 提交于 2019-11-28 18:03:59
原文引用 大专栏 https://www.dazhuanlan.com/2019/08/27/5d64bdd9c65fe/ 上一篇文章介绍了数字图像处理的概念,数字图像的处理工具及表示,这篇文章,我们接着来介绍数字图像的类型。 一、图像类型 工具箱支持四种图像类型: 灰度级图像 二值图像 索引图像 RGB图像 大多数单色图像的处理都采用的是 二值图像 或者 灰度级图像 ,我们首先来介绍这两种图像,剩下两种之后再来讲解。 二、灰度级图像 ​ 一个灰度级图像其实是一个数据矩阵,矩阵的值代表灰度的浓淡。当灰度级图像的元素是unit8或者unit16类时,它们分别具有[0,255]和[0,65535]的整数值,若图像为double类或者single类,其值为浮点数,且其图像的值通常会归一到[0,1]范围内。 ​ 下面我们来介绍一下上面提到的图像处理的类: 名称 描述 double 双精度浮点数,范围为±10 308 (8字节/元素) single 单精度浮点数,范围为±10 38 (4字节/元素) unit8 无符号8bit整数,范围为[0,255] (范围1字节/元素) unit16 无符号16bit整数,范围为[0,65535] (范围2字节/元素) unit32 无符号32bit整数,范围为[0,4294967295] (范围4字节/元素) int8 有符号8bit整数,范围为[

redis的数据结构与对象

倾然丶 夕夏残阳落幕 提交于 2019-11-28 17:57:24
  地方简单动态字符串   redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string sds)的抽象类型,并将sds作为redis的默认字符串表示。    在redis中,c字符串只会作为字符串字面量用在一些无须对字符串值进行修改的地方 。比如打印日志:   redisLog(REDIS_WRNING,"redis is now ready to exit,bye bye");    如果redis需要的是一个可以被修改的字符串,那么就会使用sds来表示字符串的值 ,比如,如果在客户端执行命令,msg 和 hello word都将会用sds来表示。   redis> set msg "hello word"   OK   除了用来保存数据库中的字符串值之外,sds还被用作缓冲区:AOF模块中的AOF缓冲区。    1.sds定义   每个sds.h/sdshdr结构表示一个sds值:      sds遵循了c字符串以空字符结尾的惯例,保存空字符的1字节空间不计算到len属性中。为空字符串分配额外的1字节空间,以及将空字符串添加到字符数组的末尾都是由sds函数自动完成的,所以空字符串对于sds的使用者来说是完全透明的。 遵循了c字符串以空字符结尾的惯例的好处是

ios开发之NSData

末鹿安然 提交于 2019-11-28 15:22:13
NSData用于保存字节数组。 初始化 - (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b; 1 初始化对象。 不进行复制字节数组操作,直接设置字节指针为bytes,长度为length。 - (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length; 1 初始化对象。 不进行复制字节数组操作,直接设置字节指针为bytes,长度为length。 - (instancetype)initWithBytes:(nullable const void *)bytes length:(NSUInteger)length; 1 初始化对象。 复制字节数组,设置字节指针指向复制的字节数组,长度为length。 - (nullable instancetype)initWithContentsOfFile:(NSString *)path; 1 读取文件内容初始化对象。 读取成功则返回对象,如果失败则返回nil。 - (nullable instancetype)initWithContentsOfFile:(NSString *)path options:

C++内存详解[精]

你离开我真会死。 提交于 2019-11-28 12:53:15
伟大的Bill Gates 曾经失言:   640K ought to be enough for everybody — Bill Gates 1981   程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。   1、内存分配方式   内存分配方式有三种:    (1) 从静态存储区域分配 。内存在程序编译的时候就已经分配好, 这块内存在程序的整个运行期间都存在 。例如全局变量,static变量。   (2) 在栈上创建 。在执行函数时,函 数内局部变量的存储单元都可以在栈上创建,函数 执行结束时这些存储单元自动被释放 。栈内存分配运算 内置于 处理器的指令集中,效率很高 ,但是分配的内存 容量有限 。   (3) 从堆上分配 ,亦称 动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存 ,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。   2、常见的内存错误及其对策   发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来

浅析strlen()和sizeof()

爷,独闯天下 提交于 2019-11-28 09:38:30
  在 C 语言的学习及找工作时的笔试中,经常会遇到strlen()和 sizeof()这一对让人傻傻分不清的双胞胎。那么这对双胞胎有什么区别呢?   1. strlen()求的是字符串的有效长度,针对的对象是字符串;sizeof()求的是大小,针对的是类型。   2. strlen()是函数,而 sizeof()表面看起来是函数,其本质是关键字。   首先先明确 strlen()是一个函数,而 sizeof()是一个关键字,何以表明? #include<stdio.h> void fun () { printf(“This is fun ()!\n”); } void main() { fun (); }   fun 是一个函数,则在调用函数时,函数名一定要加上括号,即使函数没有任何参数,如果不加括号,则无法调动函数的运算。 #include<stdio.h> void fun() { printf ( "this is fun\n" ); } void main() { fun; //此处虽然不会造成程序编译错误,但不能调动函数 fun()的运行 }   在这个程序中,主函数中的fun表示的是函数fun()的地址,所以函数可以正常变异,但不能调动函数fun()。   若一个名字代表的是函数名,则在调用函数时一定要加上括号,那么sizeof()关键字又有哪些特性,是否跟函数一样