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
未完待续,时间未知。。。