赞
踩
经过多方的收集,对于matlab的基本函数也有了一定的理解。
下面我把这些函数整理如下,以防止我需要备用,或者给予其他的matlab初学者。
我是有一定的编程基础的,所以 matlab的学习较快,各位可以根据自己的实际情况选择。
PS:可能函数的顺序有点混乱。多年之后再看看,是写的真的乱。(2018-03-16)
- 函数功能:两个数组间元素逐个计算的二值操作
-
- 使用方法:C=bsxfun(fun,A,B)
-
- 两个数组A合B间元素逐个计算的二值操作,fun是函数句柄或者m文件,也可以为如下内置函数:
-
- @plus 加
- @minus 减
- @times 数组乘《Simulink与信号处理》
- @rdivide 左除
- @ldivide 右除
- @power 数组幂乘
- @max 二值最大值
- @min 二值最小值
- @rem 余数
- @mod 求模
- @atan2 四象限反正切
- @hypot 平方和的平方根
- @eq 等于
- @ne 不等于
- @lt 小于www.iLoveMatlab.cn
- @le 小于或等于
- @gt 大于
- @ge 大于或等于
- @and 逻辑并
- @or 逻辑或
- @xor 逻辑异或
-
- 应用举例:
-
- 在此例子中,bsxfun函数用来计算矩阵A每一列减去其对应列的平均值.
-
- A = magic(5)
- A =
- 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 = bsxfun(@minus, A, mean(A))book.iLoveMatlab.cn
- A =
-
- 4 11 -12 -5 2
- 10 -8 -6 1 3
- -9 -7 0 7 9
- -3 -1 6 8 -10
- -2 5 12 -11 -4

- clc
- Clear Command Window
- GUI Alternatives
- As an alternative to the clc function, select Edit > Clear Command Window in the MATLAB desktop.
- Syntax
- clc
- Description
- clc clears all input and output from the Command Window display, giving you a "clean screen."
- After using clc, you cannot use the scroll bar to see the history of functions, but you still can use the up arrow to recall statements from the command history.
- Examples
- Use clc in a MATLAB code file to always display output in the same starting position on the screen.
- 简单的说就是清除屏幕之前打过的代码,清屏~
- 关于crossvalind函数 盛经纬 jevonsheng@163.com
-
- crossvalind是cross-valindation的缩写,意即交叉检验。 常用的形式有:
-
- ①Indices =crossvalind('Kfold', N, K)
-
- ②[Train, Test] = crossvalind('HoldOut',N, P) ③[Train, Test] = crossvalind('LeaveMOut',N, M)
-
- ④[Train, Test] = crossvalind('Resubstitution',N, [P,Q])
-
- ①indices =crossvalind('Kfold', N, K):
-
- 该命令返回一个对于N个观察样本的K个fold(意为折,有“层”之类的含义,感觉还是英文意思更形象)的标记(indices)。该标记中含有相同(或者近似相同)比例的1—K的值,将样本分为K个相斥的子集。在K-fold交叉检验中,K-1个fold用来训练,剩下的一个用来测试。此过程循环K次,每次选取不同的fold作为测试集。K的缺省值为5。 使用程序:
-
- [m n]=size(data); %data为样本集合。每一行为一个观察样本
-
- indices = crossvalind('Kfold',m,10); %产生10个fold,即indices里有等比例的1-10
-
- for i=1:10
-
- test=(indices==i); %逻辑判断,每次循环选取一个fold作为测试集 train=~test; %取test的补集作为训练集,即剩下的9个fold
-
- data_train=data(trian,:); %以上得到的数都为逻辑值,用与样本集的选取 label_train=label(train,:); %label为样本类别标签,同样选取相应的训练集 data_test=data(test,:); %同理选取测试集的样本和标签 label_test=label(test,:); end
-
-
- ②[Train, Test] = crossvalind('HoldOut',N, P):
-
- 该命令返回一个逻辑值的标记向量,从N个观察样本中随机选取(或近似于)P*N个样本作为测试集。故P应为0-1,缺省值为0.5。 使用程序:
-
- groups=ismenber(label,1); %label为样本类别标签,生成一个逻辑矩阵groups,1用来逻辑判断筛选
-
- [train, test] = crossvalind('holdOut',groups); %将groups分类,默认比例1:1,即P=0.5
-
-
- ③[Train, Test] = crossvalind('LeaveMOut',N, M):
-
- 该命令返回一个逻辑值的标记向量,从N个观察样本中随机选取M个样本作为测试集。M的缺省值为1。值得注意的是,LeaveMOut在循环中使用不能保证产生的是互补集合,即每次循环的随机选取是独立的。如果要用互补的话还是使用Kfold命令。 使用程序:
-
- [m,n]=size(data);
-
- [train,test]=crossvalind('LeaveMOut',m,10)
-
- svmStruct = svmtrain(data(train,:),groups(train)); classes = svmclassify(svmStruct,data(test,:)); cp=classperf(groups); cr=cp.CorrectRate
-
- ④[Train, Test] = crossvalind('Resubstitution',N, [P,Q]):
-
- 本函数为②的一个特殊情况。当我不想把P*N剩下的部分全部作为训练集的时候使用该函数,用Q指定一个比例,选取Q*N作为训练集。两个集合的选取以最小化交集为原则。

- MATLAB中ismember函数
-
- a=[1 2 3 4 5];
-
- b=[3 2 5 6 7 8 77 44 3];
-
- [tf index]=ismember(a,b); %判断a中的元素有没有在b中出现 tf =
-
- 0 1 1 0 1
-
- index =
-
- 0 2 9 0 3
-
- %tf返回一个和a同样大小的矩阵,a的元素在b中出现,tf上的相应位置元素值为1,没有出现则为0;index也是返回一个和a同样大小的矩阵,其相应位置的值为a相应位置的元素在b中出现的最后标号,注意是最后的标号,若某元素在b中出现多次,则记录的是最后一次出现的标号,若该位置上的a的元素没有在b中出现,则返回0.
- if expression1
- statements1;
- elseif expression2
- statements2;
- statement22;
- statement22;
- else
- statements3;
- end
- 命令:
- combntns(set,subset)
- 在集合set中取subset个元素的所有组合
- 例如:在[2 3 5 9 7]中取3个元素的所有组合为:
- combntns([2 3 5 9 7],3)
- 运行结果:
- 2 3 5
- 2 3 9
- 2 3 7
- 2 5 9
- 2 5 7
- 2 9 7
- 3 5 9
- 3 5 7
- 3 9 7
- 5 9 7
-
- 另外可以用命令perms得到排列,用法:
- perms(vector)
- 给出向量vector的所有排列,例如
- perms([2 3 5])
- 运行结果:
- 5 3 2
- 5 2 3
- 3 5 2
- 3 2 5
- 2 3 5
- 2 5 3

- help nchoosek or combntns
- 如:
- >> A1=combntns([60,61,62],2)
- A1 =
- 60 61
- 60 62
- 61 62
- >> A2=combntns([60,61,62],1)
- A2 =
- 60
- 61
- 62
-
- 方法2例子2
- 命令:
- combntns(set,subset)
- 在集合set中取subset个元素的所有组合
- 例如:在[2 3 5 9 7]中取3个元素的所有组合为:
- combntns([2 3 5 9 7],3)
- 运行结果:
- 2 3 5
- 2 3 9
- 2 3 7
- 2 5 9
- 2 5 7
- 2 9 7
- 3 5 9
- 3 5 7
- 3 9 7
- 5 9 7
-
- 另外可以用命令perms得到排列,用法:
- perms(vector)
- 给出向量vector的所有排列,例如
- perms([2 3 5])
- 运行结果:
- 5 3 2
- 5 2 3
- 3 5 2
- 3 2 5
- 2 3 5
- 2 5 3

- intersect(A,B)
- A与B的交集
- Union(A,B)
- A与B的并集
- 问题:
- 如何快速判断matlab两个矩阵可以通过列变换变得完全一样
- 比如
- >> a = magic(5)
- a =
- 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
- >> b = [ 5 4 3 2 1]
- b =
- 5 4 3 2 1
- >> c = a(:,b)
- c =
- 15 8 1 24 17
- 16 14 7 5 23
- 22 20 13 6 4
- 3 21 19 12 10
- 9 2 25 18 11
-
- 如果知道a,c可以通过列变换变得完全一样
-
- 解答1(最优):
- 这个看起来就是要判读是否只是列的顺序不同。如果是那样
-
- isequal(sortrows(a.'),sortrows(c.'))
-
- 解答2(最基本的思想)
- 比较笨一点的方法就是产生和a的列数相同的排列数,然后判断。
- a = magic(5)
- b = [ 5 4 3 2 1];
- c = a(:,b)
- arr_matrix=perms(1:size(a,2));
- for k=1:size(arr_matrix,1)
- if isequal(a(:,arr_matrix(k,:)),c)
- fprintf('a,c可以通过列变换变得一样\n\n')
- fprintf('对应原矩阵的列为:\n')
- disp(arr_matrix(k,:))
- end
- end
-
- 结果:
- a =
- 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
- c =
- 15 8 1 24 17
- 16 14 7 5 23
- 22 20 13 6 4
- 3 21 19 12 10
- 9 2 25 18 11
- a,c可以通过列变换变得一样
-
- 对应原矩阵的列为:
- 5 4 3 2 1

- 问题:
- matlab编程,如何将一矩阵中等于某个值的元素全部替换成另一个值?
- 我有个矩阵,里面有些元素为某一特定值,如1.5,请教如何将矩阵中等于1.5的元素全部置1.另外,如果特定的值为NaN,也能执行同样的操作么?
- PS:不要用两个for循环,然后对每个元素逐一比较,再令它等于1的那种,需要步骤少运算快些的
- %if you have a matrix A
- idx=find(A==1.5); % find all 1.5
- A(idx)=1; % set 1 to these indexes
-
- %about NaN
- idx=find(isnan(A)); % find all NaN value
- A(idx)=1; % set 1 to these indexes
- 今天用到crossvalind. 这个适用于Cross validation。中文应该叫做交叉验证。我主要想说说这个函数怎么用的。举个简单的例子;
- P_train=[1 2 3 4 5 6 7 8 ]'
- P_train =
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- Indices=crossvalind('Kfold',8,4)
- Indices =
- 2
- 3
- 4
- 1
- 4
- 1
- 3
- 2
- 看到Incides了吗,这个是问题的关键,他把所有的点分成4类。数字一样的是一类,Indices=crossvalind('Kfold',8,4)中‘8’代表元素的个数,‘4’代表分成几类,因为有四类,每类应该有8/4两个元素,看indices中,每个相同的数字有两个元素,这样就能完成分类了。
- 正常都是需要循环4次,这里的‘4’和crossvalind中的参数‘4’是一样的。比如第一次循环令i=1;
- 得到indicies中是‘1’的,把其中的相应的设置为‘1’,其余的为零。
- val_set_index=(Indices==1)
- 这个是对于test的(validation)验证
- val_set_index =
- 0
- 0
- 0
- 1
- 0
- 1
- 0
- 0
- train_set_index=~val_set_index
- 这个是train的(训练分类器)
- train_set_index =
- 1
- 1
- 1
- 0
- 1
- 0
- 1
- 1
- 这两个结果加在一起是一个全为1的向量。
- 若果我想提取其中的test,用下面语句:
- >>val_ma=P_train(val_set_index,:);%val_set_index=[0 0 0 1 0 1 0 0]'
- >> val_ma
- val_ma =
-
- 4
- 6
- 看见没得到相应的测试元素。

- K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小。
-
- 使用方法:
- Idx=Kmeans(X,K)
- [Idx,C]=Kmeans(X,K)
- [Idx,C,sumD]=Kmeans(X,K)
- [Idx,C,sumD,D]=Kmeans(X,K)
- […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)
-
-
- 各输入输出参数介绍:
-
-
- X N*P的数据矩阵
- K 表示将X划分为几类,为整数
- Idx N*1的向量,存储的是每个点的聚类标号
- C K*P的矩阵,存储的是K个聚类质心位置
- sumD 1*K的和向量,存储的是类间所有点与该类质心点距离之和
- D N*K的矩阵,存储的是每个点与所有质心的距离
-
- […]=Kmeans(…,'Param1',Val1,'Param2',Val2,…)
- 这其中的参数Param1、Param2等,主要可以设置为如下:
-
- 1. ‘Distance’(距离测度)
- ‘sqEuclidean’ 欧式距离(默认时,采用此距离方式)
- ‘cityblock’ 绝度误差和,又称:L1
- ‘cosine’ 针对向量
- ‘correlation’ 针对有时序关系的值
- ‘Hamming’ 只针对二进制数据
-
- 2. ‘Start’(初始质心位置选择方法)
- ‘sample’ 从X中随机选取K个质心点
- ‘uniform’ 根据X的分布范围均匀的随机生成K个质心
- ‘cluster’ 初始聚类阶段随机选择10%的X的子样本(此方法初始使用’sample’方法)
- matrix 提供一K*P的矩阵,作为初始质心位置集合
-
- 3. ‘Replicates’(聚类重复次数)
- 整数
-
-
-
- 使用案例:
-
- data=
- 5.0 3.5 1.3 0.3 -1
- 5.5 2.6 4.4 1.2 0
- 6.7 3.1 5.6 2.4 1
- 5.0 3.3 1.4 0.2 -1
- 5.9 3.0 5.1 1.8 1
- 5.8 2.6 4.0 1.2 0
-
- [Idx,C,sumD,D]=Kmeans(data,3,'dist','sqEuclidean','rep',4)
-
-
-
- 运行结果:
- Idx =
- 1
- 2
- 3
- 1
- 3
- 2
-
- C =
- 5.0000 3.4000 1.3500 0.2500 -1.0000
- 5.6500 2.6000 4.2000 1.2000 0
- 6.3000 3.0500 5.3500 2.1000 1.0000
-
- sumD =
- 0.0300
- 0.1250
- 0.6300
-
- D =
- 0.0150 11.4525 25.5350
- 12.0950 0.0625 3.5550
- 29.6650 5.7525 0.3150
- 0.0150 10.7525 24.9650
- 21.4350 2.3925 0.3150
- 10.2050 0.0625 4.0850
-
- matlab-kmeans函数注释
-
- X = [randn(100,2)+ones(100,2);...
- randn(100,2)-ones(100,2)]; 产生100个样本点,行指向每个样本,列是维变量值。
- opts = statset('Display','final');
-
- [idx,ctrs] = kmeans(X,2,'Distance','city','Replicates',5,'Options',opts);
- %返回参数意义:[IDX,C,sumd,D]=kmeans()
- IDX:每个样本点所在的类别
- C:所聚类别的中心点坐标位置k*p,k是所聚类别
- sumd:每个类内各点到中心点的距离之和
- D:每个点到各类中心点的距离n*k
-
- Matlab聚类分析中kmeans函数运行结果,请教为什么?
- k=5;
- [IDX,C,sumd,D] =kmeans(SCORE(:,1:3),k);
- 我想把主成份分析后的结果SCORE(:,1:3),大小为89*3,聚成5类,我的理解的运行结果应该是:
- IDX是1~5的整数,表示归到了那一类;
- C是每一类的质心位置,大小是5*3;
- sumd是每一类中各点到质心的距离和,大小是1*5;
- D是每个点到质心的位置,大小是89*1
-
- PS:
-
- 用它聚类,每次结果都不一样,是kmeans算法本身的缘故,还是MATLAB内部实现的BUG
- 应该是和初始值有关的~
- 初始值不同,聚类就不同~
- matlab 的 kmeans 在聚类时确有不稳健的问题,但也不至于每次运算结果都不一样,除非你的数据个体数很多,和/或分的组数较大。另外,高版本的比低版本的功能也有所加强。
- 又及,聚类问题其实比人们想象的复杂得多,这主要涉及数据的标准化与否,所分组数的多寡,聚类的方法等等,都将使聚类结果有所改变。寻找最合适的聚类并非易事。

- Matlab中计算程序运行时间的三种方法
-
- 经常我们需要计算我们程序到底运行多长时间,这样可以比较程序的执行效率。当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了。
-
- 下面我们就说说Matlab中计算程序运行时间的三种常用方法吧!
-
- 注意:三种方法由于使用原理不一样,得到结果可能有一定的差距!
-
- 1、tic和toc组合(使用最多的)
-
- 计算tic和toc之间那段程序之间的运行时间,它的经典格式为
-
- 1. tic
-
- 2. 。。。。。。。。。。
-
- 3. toc
-
- 复制代码
-
- 换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。这个有点拗口,下面我们举个例子说明
-
- 1. % by dynamic of Matlab技术论坛
-
- 2. % see also http://www.matlabsky.com
-
- 3. % contact me matlabsky@gmail.com
-
- 4. % 2009-08-18 12:08:47
-
- 5. clc
-
- 6. tic;%tic1
-
- 7. t1=clock;
-
- 8. for i=1:3
-
- 9. tic ;%tic2
-
- 10. t2=clock;
-
- 11. pause(3*rand)
-
- 12. %计算到上一次遇到tic的时间,换句话说就是每次循环的时间
-
- 13. disp(['toc计算第',num2str(i),'次循环运行时间:',num2str(toc)]);
-
- 14. %计算每次循环的时间
-
- 15. disp(['etime计算第',num2str(i),'次循环运行时间:',num2str(etime(clock,t2))]);
-
- 16. %计算程序总共的运行时间
-
- 17. disp(['etime计算程序从开始到现在运行的时间:',num2str(etime(clock,t1))]);
-
- 18. disp('======================================')
-
- 19. end
-
- 20. %计算此时到tic2的时间,由于最后一次遇到tic是在for循环的i=3时,所以计算的是最后一次循环的时间
-
- 21. disp(['toc计算最后一次循环运行时间',num2str(toc)])
-
- 22. disp(['etime程序总运行时间:',num2str(etime(clock,t1))]);
-
- 复制代码
-
- 运行结果如下,大家可以自己分析下
-
- 1. toc计算第1次循环运行时间:2.5628
-
- 2. etime计算第1次循环运行时间:2.562
-
- 3. etime计算程序从开始到现在运行的时间:2.562
-
- 4. ======================================
-
- 5. toc计算第2次循环运行时间:2.8108
-
- 6. etime计算第2次循环运行时间:2.813
-
- 7. etime计算程序从开始到现在运行的时间:5.375
-
- 8. ======================================
-
- 9. toc计算第3次循环运行时间:2.0462
-
- 10. etime计算第3次循环运行时间:2.046
-
- 11. etime计算程序从开始到现在运行的时间:7.421
-
- 12. ======================================
-
- 13. toc计算最后一次循环运行时间2.0479
-
- 14. etime程序总运行时间:7.421
-
- 复制代码
-
- 2、etime(t1,t2)并和clock配合
-
- 来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式
-
- 1. t1=clock;
-
- 2. 。。。。。。。。。。。
-
- 3. t2=clock;
-
- 4. etime(t2,t1)
-
- 复制代码
-
- 至于例子我就不举了,因为在上面的例子中使用了etime函数了
-
- 3、cputime函数来完成
-
- 使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下
-
- 1. t0=cputime
-
- 2. 。。。。。。。。。。。。。
-
- 3. t1=cputime-t0
-
- 复制代码
-
- 上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc组合,When timingthe duration of an event, use the tic and toc functions instead of clock oretime.
-
- 至于大家可以根据自己的喜好自己选择,但是使用tic/toc的时候一定要注意,toc计算的是与最后一次运行的tic之间的时间,不是第一个tic,更不是第二个。。。。。

- 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(3.12 -3.12)
-
- ans =
-
- 0
-
- >> round([3.12 -3.12])
-
- ans =
-
- 3 -3

- mat数据格式是matlab的数据存储的标准格式。
- 你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。
- 我给你几个函数名
- matopen 打开mat文件
- matclose 关闭mat文件
- magetfp 取得mat文件的c语言句柄
- matGetArray 取得一个数组
- 具体内容看联机文档
- matlab中mean的用法
- 2011-11-29 14:47
- http://hi.baidu.com/megachan/blog/item/61e1bb6cb7ab2de64316941b.html
-
- 函数功能
- 求数组的平均数或者均值
- 使用方法
- M = mean(A)
- 返回沿数组中不同维的元素的平均值。
- 如果A是一个向量,mean(A)返回A中元素的平均值。
- 如果A是一个矩阵,mean(A)将其中的各列视为向量,把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。
- 如果A是一个多元数组,mean(A)将数组中第一个非单一维的值看成一个向量,返回每个向量的平均值。
-
- M = mean(A,dim)
- 返回A中沿着标量dim指定的维数上的元素的平均值。对于矩阵,mean(A,2)就是包含每一行的平均值的列向量。
- 《Simulink与信号处理》
- 应用举例 编辑本段回目录
-
- A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];
- mean(A)
- ans =
- 3.0000 4.5000 6.0000
-
- mean(A,2)
- ans =
- 2.0000
- 4.0000
-
- 6.0000
- 6.0000
-
- mean(A)
-
- 当A为向量时,那么返回值为该向量所有元素的均值
-
- 当A为矩阵时,那么返回值为该矩阵各列向量的均值
-
- mean(A,2)
-
- 返回值为该矩阵的各行向量的均值

- 最近结合ACO和SVM做分类,于是仔细看了下svmtrain的help文档。现结合该doc文档,做简单整理,希望对
-
- svm入门者有点帮助哦。
-
- svmtrain:用于训练支持向量机分类器。语法格式如下:
-
- SVMStruct = svmtrain(Training, Group)
-
- SVMStruct = svmtrain(..., 'Kernel_Function', Kernel_FunctionValue, ...)
-
- SVMStruct = svmtrain(..., 'RBF_Sigma', RBFSigmaValue, ...)
-
- SVMStruct = svmtrain(..., 'Polyorder', PolyorderValue, ...)
-
- SVMStruct = svmtrain(..., 'Mlp_Params', Mlp_ParamsValue, ...)
-
- SVMStruct = svmtrain(..., 'Method', MethodValue, ...)
-
- SVMStruct = svmtrain(..., 'QuadProg_Opts', QuadProg_OptsValue, ...)
-
- SVMStruct = svmtrain(..., 'SMO_Opts', SMO_OptsValue, ...)
-
- SVMStruct = svmtrain(..., 'BoxConstraint', BoxConstraintValue, ...)
-
- SVMStruct = svmtrain(..., 'Autoscale', AutoscaleValue, ...)
-
- SVMStruct = svmtrain(..., 'Showplot', ShowplotValue, ...)
-
- 解释如下:
-
- Training是一个M行N列的矩阵,M是样本数,N是特征维数。Group:是个列向量,表示样本对应的类别,用字符串表示(可以用数字或单个字符)。
-
- classifier is returned in SVMStruct, a structure with the following fields. 'Kernel_Function', Kernel_FunctionValue,.......'Showplot', ShowplotValue这些在svmtrain中是可选项。他们在svmtrain中出现的顺序是无关紧要的。但必须成对出现,前面单引号里的是字符标记,后面给出的是对应的值。Kernel_FunctionValue 有如下些可选类别:
-
- linear — Default. Linear kernel or dot product.
- quadratic — Quadratic kernel.
- rbf — Gaussian Radial Basis Function kernel with a default scaling factor, sigma, of 1.
- polynomial — Polynomial kernel with a default order of 3.
- mlp — Multilayer Perceptron kernel with default scale and bias parameters of [1, -1].
-
- 如可通过如下来设定核函数为Gaussian Radial Basis Function kernel :
-
- SVMStruct = svmtrain(Training, Group, 'Kernel_Function', rbf);

- matlab编程中有时想调入电脑中的某个文件,这时不妨用windows传统的文件打开对话框试一试:
-
- [filename, pathname] = uigetfile( ...
- {'*.jpg;*.tif;*.png;*.gif','All Image Files';...
- '*.*','All Files' },...
- '请选择要修改的图片(可多选)', ...
- 'MultiSelect', 'on');
-
- 此函数的用法为
-
- [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)
-
- FileName:返回的文件名
-
- PathName:返回的文件的路径名
-
- FilterIndex:选择的文件类型
-
- FilterSpec:文件类型设置
-
- DialogTitle:打开对话框的标题
-
- DefaultName:默认指向的文件名
-
- 例子:(接来自matlab的帮助)
-
- 1.最简单的形式,只设置了一种可选择的文件类型
-
- [FileName,PathName] = uigetfile('*.m','Select the M-file');
-
- 2.设置多种文件类型
-
- [filename, pathname] = ...
- uigetfile({'*.m';'*.mdl';'*.mat';'*.*'},'File Selector');
-
- 3.可以为文件类型设置说明,注意书写格式
-
- [filename, pathname] = uigetfile( ...
- {'*.m;*.fig;*.mat;*.mdl','MATLAB Files (*.m,*.fig,*.mat,*.mdl)';
- '*.m', 'M-files (*.m)'; ...
- '*.fig','Figures (*.fig)'; ...
- '*.mat','MAT-files (*.mat)'; ...
- '*.mdl','Models (*.mdl)'; ...
- '*.*', 'All Files (*.*)'}, ...
- 'Pick a file');
-
- 4.可返回选择的文件类型序号,并且可以设置文件多选,设置文件多选时注意,当只选了一个文件时,返回的filename为字符串,选择多个文件时,返回的元胞类型。
-
- [filename, pathname, filterindex] = uigetfile( ...
- { '*.mat','MAT-files (*.mat)'; ...
- '*.mdl','Models (*.mdl)'; ...
- '*.*', 'All Files (*.*)'}, ...
- 'Pick a file', ...
- 'MultiSelect', 'on');
-
- 5.可以设置默认文件名
-
- uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
- '*.*','All Files' },'mytitle',...
- 'C:\Work\myfile.jpg')
-
- 更多文件对话框,可参考matlab帮助。
-
- 一点小技巧:当返回了一个文件的时候,可以用fullfile将路径和文件名组合起来,如
-
- [filename, pathname] = uigetfile('*.m', 'Pick an M-file');
- if isequal(filename,0)
- disp('User selected Cancel')
- else
- disp(['User selected', fullfile(pathname, filename)])
- end
-
- fullfile的用法如下
-
- f = fullfile('C:', 'Applications', 'matlab', 'myfun.m')
- f = C:\Applications\matlab\myfun.m
-
- 上传一个自己编的小程序,用来实现图片文件的批量缩放(帮班级上传图片,但是图片太大了,太占空间,若一个一个缩小有太费事,于是就有了这个小程序,呵呵,仅为应用,未考虑异常处理)
-
- %修改图片的大小
- %%
- clc
- clear all
- close all
- %%
- scale=inputdlg('缩放比(大于1为放大,小于1为缩小)','请输入缩放比',1,{'0.5'});
- %%
- [filename, pathname] = uigetfile( ...
- {'*.jpg;*.tif;*.png;*.gif','All Image Files';...
- '*.*','All Files' },...
- '请选择要修改的图片(可多选)', ...
- 'MultiSelect', 'on');
- %%
- if ~iscell(filename)
- filename1{1}=filename;
- else
- filename1=filename;
- end
- %%
- for i=1:length(filename1)
- image=imread(strcat(pathname,filename1{i}));
- image_resize=imresize(image,eval_r(scale{1}));
- imwrite(image_resize,strcat(pathname,datestr(now, 'mmddHH'),filename1{i}));
- end
-
- 其中的inputdlg函数实现一个要求用户输入信息的对话框,用法如下
-
- answer = inputdlg(prompt,dlg_title,num_lines,defAns,options)
-
- prompt:输入文本框的标签
-
- dlg_title:对话框的标题
-
- num_lines:输入文本框的行数
-
- defAns:默认的文本框内容
-
- options:一些可选的对话框选项
-
- 如
-
- prompt={'Enter the matrix size for x^2:',...
- 'Enter the colormap name:'};
- name='Input for Peaks function';
- numlines=1;
- defaultanswer={'20','hsv'};
-
- options.Resize='on';
- options.WindowStyle='normal';
- options.Interpreter='tex';
-
- answer=inputdlg(prompt,name,numlines,defaultanswer,options);
-
- 返回为字符串,如果想转化为数字,可以是使用函数eval。
-
- 另外input函数也可以实现用户信息输入,不过是在命令行中输入,也很简单、常用搜索。

- Empty cluster created at iteration XXX
- 是因为在分群的过程中有某些群落没有分配到任何的输入图样
- 最主要的原因在于各群的初始値设定不洽当
- 建议改进算法
- 或者设置kmeans遇到空群时的参数
- 默认参数是报错 就是楼主遇到的
- 'emptyaction':'error'|'drop'|'singleton'
- 上面是3个可选参数,分别对应 报错|丢弃空群|创建新群
- 如选用第2个参数可以这样调用
- kmeans(X,2,'emptyaction','drop')
- 当然
- 还有其他一些参数
- 可用命令
- help kmeans
最后:不当之处还请指出,转载请指出出处。谢谢!
2018-03-16: 已经改造过了,之前的代码有点不堪入目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。