Matlab是Matrix和Laboratory的综合缩写,意为矩阵实验室,由美国MathWorks公司出品。作为一款数学软件,集数据导入导出、数值分析、时序分析、图影处理、仿真等内容于一体。同Fortran、IDL、Python等数据分析软件,Matlab有着丰富的工具包,为大量学科的数据提供了较为实用且便捷的选择。
这一次,先来了解一下数据的类型和计算机存储。
由于Matlab是基于“矩阵”的,所以数据通常以矩阵数组的形式进行存储。高中数学中,关于数组的广义定义应该是由一串有规律的数组成的集合,但通常是由一个下标来表征数组的通项公式。但是,实际应用中,通常都应该由两个及两个以上的下标来表征对应位置的数,例如:古希腊毕达哥拉斯学派的数学家总结的第个边形数的表达式
数据通常可以分为数型、字符型、元胞型、结构型。数型就相当于数集,通常根据有无小数点可以分为实型(浮点型float)和整型(integer),而鉴于复型(complex)是相当于二维数据格式,需要实部和虚部共同来决定。同时,对于数型,从精度(存储的有效位数)考虑,在Matlab中可以分为单精度(single precision)和双精度(double precision)。字符型(str/char)包括字符或字符串,通常用前后单引号赋值,对于数据字符,可考虑使用函数转化,否则无法直接参与运算。但如果对于不同的变量数型或字符型,如何做到存入一个数据中方便信息传输?通常会考虑元胞型(cell),即一个元胞数组中通常有各种变量的不同维度大小的数据共同存储空间,找到元胞数组中对应位置即可提取需要的数据列。而不同的元胞数组又可以构成结构型(struct)数据,struct数据中通常有各种对应的信息名称,比如:A和B同学的期末考试各科成绩及个人信息等存储,就可以存成结构型数据。(注意:字符型变量不能和数型变量做交叉赋值。)当然,Matlab的界面区会直接显示各个变量的类型,需做好区分。
在这里,可能有很多第一次接触计算机语言的小伙伴。通常,单精度数据是32位,双精度存储是64位,那跟计算机的内部数据存储到底有什么联系呢?0还是0吗?
首先,要清楚的是计算机对于任何数字都是以‘0/1’二进制编码记录的,1个字节(byte)等于8位(bit),32 bit=4 byte。因此,在Fortran中,一个单精度的实数,就可以用real*4去定义。对于32 bit来说,每个bit都只有0/1的选择,下面给定计数法则:
看到这里,还没有搞懂?下面给出762.75在计算机里的存储,来看看具体过程吧?
图一. 数据存储Step1
图二. 数据存储Step2-3
那对于单精度的数值最大能存多少呢?来算一算:
图三. 单精度的数据最大存储
看到这里,是否比较清晰了呢?64 bit你是否也可以信手拈来?是不是可以轻松地其计数法则和最大最小呢?
图四. 双精度的数据存储过程和上下限
可以看出单双精度的数据在存储上就差了不是一个量级的水平,因此随着计算机性能的提高、存储能力的提升,通常会更喜欢双精度的数据。但实际中,卫星数据的传递,由于信息量过大,通常也有单精度的数据,需要在使用的时候特别注意。
对于原始观测数据来说:对一种确定变量的连续时间观测,也叫作“时间序列”,是一维(1-D)的数列,象征性地可以记为;一个确定时刻,对一种确定变量,有着类似“经纬度”的变化,也叫作“图像序列”,是二维(2-D)的数组,象征性地可以记为;而对一种有着“经纬度”变化的确定变量,连续时间观测,也叫作“视频序列”,是三维(3-D)的数据,象征性地可以记为。因此,如果对一个空间的实时观测量,应该是具有四维(4-D)的信息,象征性地可以记为,以此类推。关于实测数据的实际维度和每个维度的个数,可以用来表达。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删