Matlab函数解析
来源:互联网 发布:淘宝魅力惠旗舰店 编辑:程序博客网 时间:2024/06/02 05:39
tic toc
tic和toc用来记录matlab命令执行的时间。
tic用来保存当前时间,而后使用toc来记录程序完成时间。
两者往往结合使用,用法如下:
tic
operations
toc
显示时间单位:秒
size()
可以用来输出矩阵的行数、列数;或者输出图像的高度和宽度
I = imread('E:\Cut1.JPG');
[X , Y]=size(I)
注意,如果是3通道的图像需要使用:
[m , n , c] = size(a)
% 图片大小 366×500的 RGB 彩色图片
% f(:,:,1) 红色分量
% f(:,:,2) 绿色分量
% f(:,:,3) 蓝色分量
double() im2double() mat2gray()
****************假设某图像数据A(uint8格式)**********************
A =
235 200 89 20
>> double(A) %返回与原矩阵数值相同但类型为double的矩阵;
ans =
235 200 89 20
>> im2double(A)
%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255;
ans =
0.9216 0.7843 0.3490 0.0784
>> mat2gray(A) %对原矩阵归一化
ans =
1.0000 0.8372 0.3209 0
*********假设矩阵A为一般二维数组,非图像数据(double格式)******************
A =
235 200 89 20
>> double(A)
ans =
235 200 89 20
>> im2double(A)
ans =
235 200 89 20
>> mat2gray(A)
ans =
1.0000 0.8372 0.3209 0
**********************小结***************************
im2double:如果输入类型是uint8、unit16、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;
double:返回数值与输入相同的double类型矩阵;
mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。
在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。
extractHOGFeatures()
I1 = imread('gantrycrane.png');
[hog1, visualization] = extractHOGFeatures(I1,'CellSize',[3232]);
subplot(1,2,1); 一行两列个子图,此时画第一个子图
imshow(I1);
subplot(1,2,2); 一行两列个子图,此时画第二个子图
plot(visualization);
其中返回值hog1为特征向量,visualization为特征的可视化图像。
imresize()
B = imresize(A, m)
返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1,则放大图像; m小于1,缩小图像。
B = imresize(A, [numrows numcols])
numrows和numcols分别指定目标图像的高度和宽度。显而易见,由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。
关于matlab的运算符的问题( .* 以及 ./ )
建议你自己试一下:
A=[1,2;3,4];
A2=A*A %没点
A3=A.*A %有点
B=[1,2];
B2=B*B %这个会出错
B3=B.*B %这个不会出错
点乘的话,是对应元素相乘。
没点的话,按照矩阵相乘法则进行,这就要求前一个矩阵的列数等于第二个矩阵的行数。好好看一下上面的AB两个例子。
相应的点除也是这样的.
你不加点,如果R是一个向量的话,就会变成向量除向量.加点表明是相应元素相除.
svmtrain和svmpredict简介
(1)model= svmtrain(train_label,train_matrix, ['libsvm_options']);
其中:
train_label表示训练集的标签。
train_matrix表示训练集的属性矩阵。
libsvm_options是需要设置的一系列参数,各个参数可参见《libsvm参数说明.txt》,里面介绍的很详细,中英文都有的。如果用回归的话,其中的-s参数值应为3。
model:是训练得到的模型,是一个结构体(如果参数中用到-v,得到的就不是结构体,对于分类问题,得到的是交叉检验下的平均分类准确率;对于回归问题,得到的是均方误差)。
(2)[predicted_label, accuracy/mse,decision_values]=svmpredict(test_label, test_matrix, model,['libsvm_options']);
其中:
test _label表示测试集的标签(这个值可以不知道,因为作预测的时候,本来就是想知道这个值的,这个时候,随便制定一个值就可以了,只是这个时候得到的mse就没有意义了)。
test _matrix表示测试集的属性矩阵。
model是上面训练得到的模型。
libsvm_options是需要设置的一系列参数。
predicted_label表示预测得到的标签。
accuracy/mse是一个3*1的列向量,其中第1个数字用于分类问题,表示分类准确率;后两个数字用于回归问题,第2个数字表示mse;第三个数字表示平方相关系数(也就是说,如果分类的话,看第一个数字就可以了;回归的话,看后两个数字)。
decision_values表示决策值(一般好像不怎么用)。
length()
问:
if length(h)>1 || h<0 || h>2*b
return
是什么意思?
答:
length(x)表示向量x的坐标分量的个数,即向量的维数。
程序的意思是:若向量h的长度>1或h<0(每个分量<0)或h>2*b(对应的每个分量都是前者的>后者的)则返回调用程序处。
rem() mod() floor() fix() ceil() round()
fix() floor() ceil() round()都是用来取整的
1) fix(x) :截尾取整.
>> fix( [3.12 -3.12])
ans =
3 -3
(2)floor(x):不超过x的最大整数.(高斯取整)
>> floor( [3.12 -3.12])
ans =
3 -4
(3) ceil(x):大于x的最小整数
>> ceil( [3.12 -3.12])
ans =
4 -3
(4) round(x)四舍五入取整
>> round(3.12 -3.12)
ans =
0
>> round([3.12 -3.12])
ans =
3 -3
MATLAB中四个取整函数具体使用方法如下:
Matlab取整函数有: fix, floor,ceil, round.
fix
朝零方向取整,如fix(-1.3)=-1; fix(1.3)=1;
floor
朝负无穷方向取整,如floor(-1.3)=-2; floor(1.3)=1;
ceil
朝正无穷方向取整,如ceil(-1.3)=-1; ceil(1.3)=2;
round
四舍五入到最近的整数,如round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1;round(1.52)=2
rem() mod()
昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem)是不同的,今天在网上具体查了一下:
通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于:
当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。
这是由于这两个函数的生成机制不同,rem函数采用fix函数,而mod函数采用了floor函数(这两个函数是用来取整的,fix函数向0方向舍入,floor函数向无穷小方向舍入)。
rem(x,y)命令返回的是x-n.*y,如果y不等于0,其中的n = fix(x./y),而mod(x,y)返回的是x-n.*y,当y不等于0时,n=floor(x./y)
两个异号整数取模取值规律 (当是小数时也是这个运算规律,这一点好像与C语言的不太一样)
先将两个整数看作是正数,再作除法运算
①能整除时,其值为0
②不能整除时,其值=除数×(整商+1)-被除数
例:mod(36,-10)=-4
即:36除以10的整数商为3,加1后为4;其与除数之积为40;再与被数之差为(40-36=4);取除数的符号。所以值为-4。
例:mod(9,1.2)=0.6
例:
>> mod(5,2)
ans=1 %“除数”是正,“余数”就是正
>> mod(-5,2)
ans=1
>> mod(5,-2)
ans=-1 %“除数”是负,“余数‘就是负
>> mod(-5,-2)
ans=-1 %用rem时,不管“除数”是正是负,“余数”的符号与“被除数”的符号相同
>> rem(5,2)
ans=1 %“被除数”是正,“余数”就是正
>> rem(5,-2)
ans=1
>> rem(-5,2)
ans=-1 %“被除数”是负,“余数”就是负
>> rem(-5,-2)
ans=-1
rand(m,n)
x=rand(m,n)产生m行n列的位于(0,1)区间的随机数
>> x=rand(1,8)
x =
0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469
sort()
(1)B=sort(A)对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序.(当A为一维时,原来是行向量排完还是行向量;原来是列向量排完还是列向量)
eg: A=[1,5,3],则sort(A)=[1,3,5]
A=[1,5,3;2,4,1],则sort(A)=[1,4,1;2,5,3]
(2)B=sort(A,dim),对数组按指定方向进行升序排序,
dim =1,表示对每一列进行排序,,dim=2表示对每一行进行排序.
(3)B=sort(A,dim,mode),mode为指定排序模式,mode为"ascend"时,进行升序排序,为"descend"时,进行降序排序.
(4)[B,I]=sort(A,.....),I为返回的排序后元素在原数组中的行位置或列位置.
X=magic(5)
X =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> [a,b]=sort(X,2)
a =
1 8 15 17 24
5 7 14 16 23
4 6 13 20 22
3 10 12 19 21
2 9 11 18 25
b =
3 4 5 1 2
2 3 4 5 1
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
结果解释:
a是原来的矩阵x按照行,每行从小到大重新排列得到的新矩阵。
b告诉你重排的详细信息,也就是做了什么样的变动。
例如b的第一行显示3 4 5 1 2,即排序后矩阵a的第一行分别对应原矩阵的3 4 5 1 2位置。
input()
例子1:
>> input('请输入一个矩阵:')
请输入一个矩阵:magic(3)
ans =
8 1 6
3 5 7
4 9 2
例子2:
>> input('请输入一个字符串:','s')
请输入一个字符串:magic(3)
ans =
magic(3)
两种情况下,用户输入的同样是magic(3)这样一个字符串,但在前一种条件下,magic(3)被理解成一个表达式,所以返回一个3阶的幻方矩阵,而后一种情况下,则直接返回这个字符串。第二个例子中的那个‘s’是选项,表示把输入理解为字符串。
mapminmax()
Y = mapminmax(X);
[Y,PS] = mapminmax(X,YMIN,YMAX)
[Y,PS] = mapminmax(X,FP)
Y = mapminmax('apply',X,PS)
X = mapminmax('reverse',Y,PS)
mapminmax()将矩阵中每一行规范化到[YMIN,YMAX]范围内,默认为[-1,1]
FP是一个结构体,里面保存着YMIN,YMAX的值
映射记录保存在结构体PS中。
由于映射记录保存在PS中,所以参数‘apply’表示本次映射采取跟PS同样的映射。
而X = mapminmax('reverse',Y,PS)的作用就是进行反归一化,将归一化的数据反归一化再得到原来的数据。
Eg:
fs.ymin = 0; %注意,这个结构体的成员名称必须是ymin和ymax
fs.ymax = 1;
x1 = [1 2 4; 3 2 2; 0 0 0;4 4 4];
[y1,ps] = mapminmax(x1,0,1);
[y2,ps2] = mapminmax(x1,fs);
[y3,ps3] = mapminmax(x1,ps); %注意,若不写参数,则默认为‘apply’,即ps与fs效果相同
[y4,ps4] = mapminmax('apply',x1,ps);
x = mapminmax('reverse',y4,ps);
输出结果:
y1 =
0 0.3333 1.0000
1.0000 0 0
0 0 0
4.0000 4.0000 4.0000
y2 =
0 0.3333 1.0000
1.0000 0 0
0 0 0
4.0000 4.0000 4.0000
y3 =
0 0.3333 1.0000
1.0000 0 0
0 0 0
4.0000 4.0000 4.0000
y4 =
0 0.3333 1.0000
1.0000 0 0
0 0 0
4.0000 4.0000 4.0000
x =
1 2 4
3 2 2
0 0 0
4 4 4
神经网络
feedforwardnet ()
feedforwardnet ( hiddenSizes , trainFcn )(matlab2012后较新的版本),在老版本的matlab,这个函数是newff。这个函数就是创建一个上述的(前馈)网络,包括两个参数,第一个hiddenSizes隐藏层的大小(实际就是节点数的多少,默认10),trainFcn是网络训练所采取的方法,这个方法包括:梯度下降算法、动量梯度下降算法、变学习率梯度下降算法等等数10种方法,各种方法各有优缺点,而有代表性的方法是有代表性的五种算法为:’traingdx’,’trainrp’,’trainscg’,’trainoss’,’trainlm’,默认的是’trainlm’。其实不需要了解的太详细,一般的数据默认的方法就非常的好了,所以这个参数可以不用管。
建立隐藏层为10个节点,采用默认训练算法的神经网络:
net= feedforwardnet(10);
train()
训练神经网络:
net= train(net, traindata, trainlabel);
神经网络train(net, P, T)函数要求P,T都是一列为一个样本,即,P为r*q矩阵,T为u*q矩阵
即,P , T的形式化描述为:
训练过程中弹出的窗体解释:
http://blog.csdn.net/q1302182594/article/details/8790613
sim()
an = sim(net,testdata);
net为训练好的网络,testdata是测试数据,an直接输出预测结果。
- matlab cov 函数解析
- Matlab bsxfun函数解析
- Matlab函数解析
- Matlab entropyfilt函数 解析
- Matlab geoidheight 函数解析
- MATLAB filter函数解析
- 【matlab】:matlab的linspace函数解析
- Matlab------------plot函数全功能解析
- Matlab中plot函数解析
- Matlab中axes函数解析
- matlab mvnrnd函数参数解析
- 【Matlab】isa函数解析 类型判断函数
- Matlab中plot函数全功能解析
- Matlab中plot函数全功能解析
- Matlab中plot函数全功能解析
- Matlab中plot函数全功能解析
- Matlab使用函数解析之文件操作
- Matlab使用函数解析之图像操作
- 【C#】提示框自动关闭
- Android Studio apk 打包流程
- redis清空缓存
- 说说各种手机输入法的体验
- css定位
- Matlab函数解析
- 当java使用数据库的jar包时如何导出jar包(转改)
- [leetcode] 463. Island Perimeter 解题报告
- 全加器 Si和Ci的表达式
- 解决Eclipse中使用Egit无法push to upstream的问题
- Android屏幕显示旋转180度解决方法
- IAR学习笔记
- Android 之生成图形验证码
- Java 实现当前日期的农历日期显示以及节气显示