Matlab函数

MAX:

当A是一个列向量时候,返回一个最大值,在此不在赘述。

当Amxn是一个矩阵的时候,有以下几种情况:

①   C = max(max(A)),返回矩阵最大值

②   D = max(A,[],1),返回每一行的最大值,即mx1的行向量

③   E = max(A,[],2),返回每一列的最大值,即1xm的列向量

④   F = max(A,8),当元素小于8,用8填充

⑤   [U V] = max(A),返回行列最大元素的行号与列号

注意以下几个表达式:

H = max(A)

I = max(A(:))

J = max(A(:,:)) 

 

编程实验如下:

A = fix (rand (5,3)*50)%

B = A;%矩阵备份一次

C = max(max(A))%矩阵最值

D = max(A,[],1)%每一列的最值,得到行向量

E = max(A,[],2)%每一行的最值,得到列向量

F = max(A,8)%小于8的数替换成8

[U V] = max(A)%U为列极值,V为行号

H = max(A)%功能同D

I = max(A(:))%功能同C

J = max(A(:,:))%功能同D 

 

结果输出:

A =

    37    47    42

    12    27    12

    25     8    40

    34     8    12

    44    12    46

C =    47

D =    44    47    46

E =

    47

    27

    40

    34

    46

F =

    37    47    42

    12    27    12

    25     6    40

    34     7    12

    44    12    46

U =    44    47    46

V =     5     1     5

H =    44    47    46

I =    47

J =    44    47    46

------------------------------------------------------------------------------------------------------------------------

repmat

B = repmat(A,m,n)
B = repmat(A,[m n])
B = repmat(A,[m n p...])

这是一个处理大矩阵且内容有重复时使用,其功能是以A的内容堆叠在(MxN)的矩阵B中,B矩阵的大小由MxN及A矩阵的内容决定,如果A是一个3x4x5的矩阵,有B = repmat(A,2,3)则最后的矩阵是6x12x5

例如:
>>B=repmat( [1 2;3 4],2,3)
B = 

1      2      1     2    1    2

3      4      3     4    3    4

1     2     1     2     1     2

3     4     3     4     3     4


其结果变为4X6。A也可以置放文字串,如:


>>C=repmat(' Long live the king!', 2,2)
C =
Long live the king! Long live the king!
Long live the king! Long live the king!

也可置放其他的:


>> D=repmat(NaN,2,5)

D =
NaN   NaN   NaN   NaN   NaN
NaN   NaN   NaN   NaN   NaN

-----------------------------------------------------------------------------------------------------------------------

dist

dist——欧式距离加权函数(Euclidean distance weight function)

语法

    Z = dist(W,P)
    df = dist('deriv')
    D = dist(pos)

描述:dist是一个欧式距离加权函数,给一个输入使用权值,去获得加权的输入。

1、dist(W,P)中:W——S×R的权值矩阵;P——R×Q的矩阵,表示Q个输入(列)向量

2、dist('deriv')返回‘’,因为dist没有导函数。

3、dist也是一个层距离函数,可以被用来寻找一层中神经元之间的距离。

     dist(pos)输入一个参数,pos——N×S的神经元位置矩阵,返回S×S的距离矩阵

例子:  

1、这里,我们定义一个随机权重矩阵W,以及输入向量P,并且计算相应的加权输入Z

       W = rand(4,3);
       P = rand(3,1);
       Z = dist(W,P)

2、我们定义10个神经元的随机的位置矩阵,并且寻找他们的距离,这些神经元是在3维空间中的。

       pos = rand(3,10);

       D = dist(pos)

 综上可知:

dist可以计算样本集中多个样本两两之间的距离矩阵。

对于图像I,将其分成n个超像素,每个超像素的特征有3维,那么形成3×n的超像素特征矩阵M,每列表示一个超像素。

此时,使用dist(M),就会得到一个n×n的矩阵N,其中的元素Nij表示的是第i个超像素和第j个超像素特征之间的欧式距离。

-----------------------------------------------------------------------------------------------------------------------------------------------------

mean

函数功能
求数组的平均数或者均值
使用方法
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)

返回值为该矩阵的各行向量的均值

---------------------------------------------------------------------------------------------------------------------------------------------------

size

1s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
 
 (2[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
 
 (3)如果在size函数的输入参数中再添加一项,并用12为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。


---------------------------------------------------------------------------------------------------------------------------
numel
n=numel(A)该语句返回数组中元素的总数。
-----------------------------------------------------------------------------

length
n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。n=max(size(A):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。

------------------------------------------------------------------------------
ndis
ndims(a)表示矩阵a的维数,即length(size(a))
比如ndims([1 2 3;4 5 6])
等于2,因为他是二维矩阵
matlab认为向量也是二维矩阵,只不过其中一个维度的长为1.
因此ndims([1 2 3])也等于2

我们可以构造一个三维甚至更高维度的矩阵,
比如a=cat(3,[1 2 3 4;5 6 7 8],[9 8 7 6;5 4 3 2])
他除了行和列以外还有一个维度,我们暂且把它叫做高度。
也就是说a有两层,第一层是[1 2 3 4;5 6 7 8],第二层是[9 8 7 6;5 4 3 2]
此时有size(a)=[2 4 2]
即2行4列2层
length(a)=4
([2 4 2]中最大为4)
ndims(a)=3
(因为他有3个维度)
----------------------------------------------------------------------
find

找到非零元素的索引和值

 

 

语法:

1.  ind = find(X)

2.  ind = find(X, k)

3.  ind = find(X, k, 'first')

4.  ind = find(X, k, 'last')

5.  [row,col] = find(X, ...)

6.  [row,col,v] = find(X, ...)

 

 

说明:

1.  ind = find(X)   

找出矩阵X中的所有非零元素,并将这些元素的线性索引值(linear indices:按列)返回到向量ind中。

如果X是一个行向量,则ind是一个行向量;否则,ind是一个列向量。

如果X不含非零元素或是一个空矩阵,则ind是一个空矩阵。

 

2.  ind = find(X, k) 或 3.  ind = find(X, k, 'first')

返回第一个非零元素k的索引值。

k必须是一个正数,但是它可以是任何数字数值类型。

 

4.  ind = find(X, k, 'last')

返回最后一个非零元素k的索引值。

 

5.  [row,col] = find(X, ...)

返回矩阵X中非零元素的行和列的索引值。

这个语法对于处理稀疏矩阵尤其有用。

如果X是一个N(N>2)维矩阵,col包括列的线性索引。

例如,一个5*7*3的矩阵X,有一个非零元素X(4,2,3),find函数将返回row=4和col=16。也就是说,(第1页有7列)+(第2页有7列)+(第3页有2列)=16。

 

6.  [row,col,v] = find(X, ...)

返回X中非零元素的一个列或行向量v,同时返回行和列的索引值。

如果X是一个逻辑表示,则v是一个逻辑矩阵。

输出向量v包含通过评估X表示得到的逻辑矩阵的非零元素。

例如,

A= magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

[r,c,v]= find(A>10);

r', c', v'
ans =
     1     2     4     4     1     3          (按列)
ans =
     1     2     2     3     4     4         (按列)
ans =
     1     1     1     1     1     1

这里返回的向量v是一个逻辑矩阵,它包含N个非零元素,N=(A>10)

 

 

例子:

例1

X = [1 0 4 -3 0 0 0 8 6];
indices = find(X)

返回X中非零元素的线性索引值。

indices =
     1     3     4     8     9

 

例2

你可以用一个逻辑表达方式定义X。例如

    find(X > 2)

返回X中大于2的元素的相对应的线性索引值。

ans =
     3     8     9

 

例3

下面find指令

X = [3 2 0; -5 0 7; 0 0 1];
[r,c,v] = find(X)

返回X中非零元素行索引值的向量

r =
     1
     2
     1
     2
     3

X中非零元素列索引值的向量

c =
     1
     1
     2
     3
     3

包含X中非零元素的向量

v =
     3
    -5
     2
     7
     1     (按列)

 

例4

下列表示

[r,c,v] = find(X>2)

返回包含X中非零元素的行索引值的向量

r =
     1
     2

包含X中非零元素的列索引值的向量

c =
     1
     3

包含N=(X>2)非零元素的逻辑矩阵

v =
     1
     1

记住,当你用find指令处理一个逻辑表达的时候,输出向量v不包含输入矩阵的非零元素的索引值。而是包含评估逻辑表达之后返回的非零值。

 

例5

在向量上的一些操作

x = [11  0  33  0  55]';

 

find(x)
ans =
     1
     3
     5

 

find(x == 0)
ans =
     2
     4

 

find(0 < x & x < 10*pi)
ans =
     1

 

例6

对于矩阵

M = magic(3)
M =
     8     1     6
     3     5     7
     4     9     2

find(M > 3, 4)

返回前四个M>3的索引值

ans =
     1
     3
     5
     6

 

例7

如果X是一个全零向量,find(X)返回一个空矩阵。

例如indices = find([0;0;0])

indices =
   Empty matrix: 0-by-1


----------------------------------------------------------------------------------------------------------------------


reshape

看Matlab的help文档讲得不是清楚。
先给上一段代码:
>> a=[1 2 3;4 5 6;7 8 9;10 11 12];
>> b=reshape(a,2,6);
这段代码的结果是这样的:
>> a
     1     2     3
     4     5     6
     7     8     9
    10    11    12
>> b
     1     7     2     8     3     9
     4    10     5    11     6    12
对于  b=reshape(a,m,n);
其中的规律是这样的,先把矩阵a按列拆分,然后拼接成一个大小为m*n的向量。然后对这个向量每隔m间隔取一个元素组成一个向量b_i,之后的向量b_i+1也是这样生成,只不过第一个元素往下移一位。这样做完之后得到m个大小为n的行向量,将这些行向量拼接即可得到矩阵b。
Matlab函数_第1张图片
 
后记:毕业设计中用到一个向量变换,一开始比较纠结,用循环实现的。迭代1000多次要用到2秒。后来用reshape函数,总共才用了0.03秒,对于我这个深度强迫症患者来说,这两秒时间我还是看得比较宝贵的,哈哈。
以后写matlab要引以为鉴,尽量少用for循环,多用矩阵或者向量的方式来处理。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

tril & triu 

用法:tril(X),其中X表示一个矩阵。
功能:tril函数是tril(X)产生X矩阵的下三角矩阵,其余元素补0。
相关函数: triu函数提取矩阵的上三角矩阵。
备注:matlab中提供了许多对矩阵操作的函数,可以实现矩阵的三角矩阵的提取( triu、tril)、矩阵的翻转( flipud、 fliplr、Flipdim)和旋转( rot90)等各种操作。
用法:triu(X),其中X表示一个矩阵。
功能:triu函数是matlab中提取矩阵上三角矩阵的函数。triu(X)产生X矩阵的上三角矩阵,其余元素补0。
相关函数: tril函数提取矩阵的下三角矩阵。
备注:matlab中提供了许多对矩阵操作的函数,可以实现矩阵的三角矩阵的提取(triu、 tril)、矩阵的翻转( flipud、 fliplr、Flipdim)和旋转( rot90)等各种操作。
---------------------------------------------------------------------------------------------------------------------
nonzeros
去掉矩阵中的零元素,并排列成列向量
-----------------------------------------------------------------------------------------------------------------------
    zscore
在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。数据标准化的方法有很多种,常用的有“最小—最大标准化”、“Z-score标准化”和“按小数定标标准化”等。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

二、z-score 标准化
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
新数据=(原数据-均值)/标准差
用zscore函数
可以把数据进行z-score标准化处理。
用法为
Y=zscore(X)
     x为标准化之前的数据,y为标准化后的数据
特点:
(1)样本平均值为0,方差为1;
(2)区间不确定,处理后各指标的最大值、最小值不相同;
(3)对于指标值恒定的情况不适用;
(4)对于要求标准化后数据 大于0 的评价方法(如几何加权平均法)不适用。
----------------------------------------------------------



你可能感兴趣的:(数学,matlab)