matlab数据类型相关——数值类型

 

一、数值类型

1、数值类型基本包括以下几种: 

double Convert to double precision
single Convert to single precision
int8 Convert to 8-bit signed integer
int16 Convert to 16-bit signed integer
int32 Convert to 32-bit signed integer
int64 Convert to 64-bit signed integer
uint8 Convert to 8-bit unsigned integer
uint16 Convert to 16-bit unsigned integer
uint32 Convert to 32-bit unsigned integer
uint64 Convert to 64-bit unsigned integer

而且这些数值类型之间可以互相转化,以下代码直观的展示它们之间的转化以及每种类型的特点 :

a = 6;
b = single(a);
c = int64(a);
d = int32(a);
e = int16(a);
f = int8(a);
g = uint64(a);
h = uint32(a);
i = uint16(a);
j = uint8(a);
whos



  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 4  single              
  c         1x1                 8  int64               
  d         1x1                 4  int32               
  e         1x1                 2  int16               
  f         1x1                 1  int8                
  g         1x1                 8  uint64              
  h         1x1                 4  uint32              
  i         1x1                 2  uint16              
  j         1x1                 1  uint8       
可以清晰的看到,不同数值类型所占的字节数不同。一般计算的时候,这些差别不很明显,但是如果数据量巨大,这些类型还是有所不同的。
比如int8类型,存储的数字范围为-128~127.

2、数组与矩阵

matlab 是 matrix&laboratory的缩写,以为矩阵实验室。从名字也可以看出这是个为矩阵而生的计算工具。

在我的理解中,数组其实就是个一维矩阵。所以接下来的重点是矩阵。

  • 矩阵的创建

矩阵的创建可以用命令创建,比如  a = ones(2,3),创建一个2行3列的全1矩阵;也可以直接创建,比如 a = [1 2 3],创建1行3列的矩阵。下边用代码进行演示。

向量的创建:

a = [1 2 3]   %生成1行3列的矩阵,或一个行向量,注意使用[]

a =

     1     2     3

a = [1,2,3]   %生成1行3列的矩阵,或一个行向量,注意使用[]和‘,’

a =

     1     2     3

b = [1;2;3]   %生成3行1列的矩阵,或一个列向量,注意使用[]和‘;’

b =

     1
     2
     3

c = 1:2:10    %生成1行5列的矩阵,或一个行向量,注意使用‘:’,从1到10隔2取数,生成数列(包括首尾)

c =

     1     3     5     7     9

d = linspace(1,5,6)   % 1和5之间生成6个线性分布的数据,构成等差数列

d =

    1.0000    1.8000    2.6000    3.4000    4.2000    5.0000

e = logspace(1,5,6)    % 1和5之间生成6个线性分布的数据,构成等差数列,作为10的指数,生成数列

e =

   1.0e+05 *

    0.0001    0.0006    0.0040    0.0251    0.1585    1.0000

f = 10.^(d)      % e 与 f 完全相等

f =

   1.0e+05 *

    0.0001    0.0006    0.0040    0.0251    0.1585    1.0000

矩阵的创建:

a = [1,2,3;4 5 6]   % 直接创建2行3列的矩阵,逗号与空格等效,‘;’表示开始下一行

a =

     1     2     3
     4     5     6

% 函数eye,生成单位矩阵
% eye(n),生成n×n的单位矩阵;eye(n,m),生成n×m的矩阵,对角线元素为1,其他为0

b = eye(3,4)

b =

     1     0     0     0
     0     1     0     0
     0     0     1     0

% eye(size(A)),生成一个矩阵A大小相同的单位矩阵


c = eye(size(a))

c =

     1     0     0
     0     1     0

% eye(m,n,classname):对角线上生成的元素是1,数据类型用classname指定。其数据类型可以是:duoble、single、int8、uint8、int16、uint16、int32、uint32 。

d = eye(3,4,'single')   % 注意数据类型要用‘’引起来

d =

     1     0     0     0
     0     1     0     0
     0     0     1     0

class(d)   % 验证矩阵d 的数据类型

ans =

single


% 函数ones,生成全1矩阵

ones(n) : 生成n*n的全1矩阵

ones(m,n) : 生成m*n的全1矩阵

ones(size(A)) : 生成与矩阵A大小相同的全1矩阵

ones(m,n,p,…)生成m*n*p*….的全1的多维矩阵

ones(m,n,…,classname)制定数据类型为classname

% ones函数与eye函数的用法都是一样的


%函数zeros,生成全0矩阵

zeros(n):生成n*n的全0矩阵

zeros(m,n:)生成m*n的全0矩阵

zeros(size(A)): 生成与矩阵A大小相同的全0矩阵

zeros (m,n,p,…)生成m*n*p*….的全0的多维矩阵

zeros (m,n,…,classname)指定数据类型为classname 

% zeros函数与eye函数的用法都是一样的


% 函数rand 函数rand用来生成[0,1]之间均匀分布的随机函数

Y=rand:生成一个随机数

Y=rand(n):生成n*n的随机矩阵

Y=rand(m,n):生成m*n的随机矩阵

Y=rand(size(A)):生成与矩阵A大小相同的随机矩阵

Y=rand(m,n,p,…):生成m*n*p*…的随机数多维数组

% rand函数与eye函数的用法都是一样的


% 函数randn 函数rand用来生成服从正态分布的随机函数

Y=randn:生成一个服从标准正态分布的随机数

Y=randn(n):生成n*n的服从标准正态分布的随机矩阵

Y=randn(m,n):生成m*n的服从标准正态分布的随机矩阵

Y=randn(size(A)):生成与矩阵A大小相同的服从标准正态分布的随机矩阵

Y=randn(m,n,p,…):生成m*n*p*…的服从标准正态分布的随机数多维数组

% randn函数与eye函数的用法都是一样的
  • 矩阵元素的提取与替换

对矩阵元素的操作都是用()来进行的,切记切记。

单个元素的提取:

a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

a1 = a(2,2)    % 取矩阵a,2行2列位置上的数字

a1 =

     5

a2 = a(3)  % 取矩阵第3个数字,matlab矩阵的存储是列优先的

a2 =

     2

 行或列元素的提取:

a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

a1 = a(:,1)     % 取矩阵a 第1列的数据,注意‘:’的使用

a1 =

     1
     4

a2 = a(1,:)    % 取矩阵a 第1行的数据,注意‘:’的使用

a2 =

     1     2     3

a3 = a(:,[1 2])  % 取矩阵a 第1,2列的数据,注意‘:’的使用

a3 =

     1     2
     4     5

a4 = a([1 2],:)  % 取矩阵a 第1,2行的数据,注意‘:’的使用

a4 =

     1     2     3
     4     5     6

a5 = a([1 2],[1 3])   % 取矩阵a 第1,2行,第1,3列交叉的数据

a5 =

     1     3
     4     6

矩阵元素的替换:

在明白矩阵元素的提取之后,替换只是在提取出来后,给它赋值即可。

a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

a(2,2) = 10   % 更改矩阵第2行第2列位置上的值

a =

     1     2     3
     4    10     6

a([1 2],[1 2]) = [10 12;15 20] % 更改矩阵2行2列位置上的值

a =

    10    12     3
    15    20     6

矩阵的复制排列:

函数repmat是复制矩阵块

>> a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

>> b = repmat(a,2,2)  % a矩阵作为一个整体,生成2行2列的a矩阵

b =

     1     2     3     1     2     3
     4     5     6     4     5     6
     1     2     3     1     2     3
     4     5     6     4     5     6
  • 矩阵的翻转与旋转

 矩阵的翻转:

flip函数,fliplr函数,flipup函数

 a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

a1 = flip(a)    % 上下翻转

a1 =

     4     5     6
     1     2     3

a2 = flipud(a)   % 上下翻转,flip up dpwn——flipud

a2 =

     4     5     6
     1     2     3

a3 = flip(a,2)   % 左右翻转

a3 =

     3     2     1
     6     5     4

>> a4 = fliplr(a)   % 左右翻转,flip left right——fliplr

a4 =

     3     2     1
     6     5     4

矩阵的旋转:

rot90(a,n) 函数,n必须是整数

a = [1,2,3;4 5 6]

a =

     1     2     3
     4     5     6

a1 = rot90(a)   %逆时针90度

a1 =

     3     6
     2     5
     1     4

a2 = rot90(a,-1)  %顺时针90度

a2 =

     4     1
     5     2
     6     3

未完待续,时间未知。。。

你可能感兴趣的:(matlab)