首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

matlab中dhh是什么函数

发布网友 发布时间:2022-04-22 00:19

我来回答

1个回答

热心网友 时间:2023-12-04 11:23

经过多方的收集 对于matlab的基本函数也有了一定的理解
下面我把这些函数整理如下 以防止我需要备用 或者给予其他的matlab初学者
我是有一定的编程基础的 所以 matlab的学习较快 各位可以根据自己的实际情况选择
PS:可能函数的顺序有点混乱

1 bsxfun函数
函数功能:两个数组间元素逐个计算的二值操作

使用方法: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

2 clc函数
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.
简单的说就是清除屏幕之前打过的代码,清屏~

3 crossvalind函数

关于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作为训练集。两个集合的选取以最小化交集为原则。

4 ismember函数

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.
5 matlab if else end 写法(格式)
if expression1
statements1;
elseif expression2
statements2;
statement22;
statement22;
else
statements3;
end
6 matlab穷举
方法1
命令:
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

方法2

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

7 matlab交集和并集
intersect(A,B)
A与B的交集
Union(A,B)
A与B的并集
8 matlab判断矩阵相等
问题:
如何快速判断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

9 matlab 设置矩阵
问题:
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
10 matlab中crossvalind函数

今天用到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
看见没得到相应的测试元素。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com