[软件使用][matlab]最近经常用到的一些函数的意思,和用法

维度不同的矩阵相乘
C=bsxfun(@times, A, B);
A=[1,2,3;
1,1,4;
2,2,3]
B(:,:,1)=[1,1,1;
0,0,0;
1,1,1]
B(:,:,2)=[2,2,2;
1,1,1,;
2,2,2]
则C:
val(:,:,1) =

1 2 3
0 0 0
2 2 3

val(:,:,2) =

2 4 6
1 1 4
4 4 6
是这样的,假设矩阵M(mnp)是一个三维矩阵,代表的是p个mn的矩阵,sum(M,3)会把mn矩阵对应位置上的p个数相加,得到一个m*n的矩阵,也即是把第三个维度压缩了。

通过乘以插值函数的傅里叶系数,在样本的傅里叶域中执行隐式插值。
xf = cellfun(@(xf, interp1_fs, interp2_fs) bsxfun(@times, bsxfun(@times, xf, interp1_fs), interp2_fs), xf, interp1_fs, interp2_fs, ‘uniformoutput’, false);这句看懂了,就过关了
cell函数总结
元胞数组:

cellfun(@(x)fun(x) ,b,‘un’,0)

mat2cell

function c = mat2cell(x,varargin)
%MAT2CELL Break matrix up into a cell array of matrices.
% C = MAT2CELL(X,M,N) breaks up the 2-D array X into a cell array of
% adjacent submatrices of X. X is an array of size [ROW COL], M is the
% vector of row sizes (must sum to ROW) and N is the vector of column
% sizes (must sum to COL).

permute(多维数组,[维数的组合])
比如:
a=rand(2,3,4); %这是一个三维数组,各维的长度分别为:2,3,4
%现在交换第一维和第二维:
permute(A,[2,1,3]) %变成324的矩阵

① cat(dim,A,B)按指定的维度,将A和B串联,dim是维度,比如1,2。1指列,2指行;

②numel(A),返回数组中,元素的个数

③gpuArray(A),在gpu中产生一个数组A,一般来说,在这句代码之前,A已经被创建在cpu中了,不过gpuArray的括号里仍然要写A这个名字。

④gather(A),当GPU跑完程序后,用gather函数将数据从GPU取回到MATLAB工作空间,存在内存中,CPU可以调用。

⑤randperm(n),返回一个行向量,这个行向量里包含从1到n之间的整数的随机置换,比如

       >> eg1:randperm(5)                  ans =  5     3     4     1     2

      >> eg2:randperm(100,5)            ans =  91    37    11    76    38  

⑥eval(a) 执行a的内容,比如a=‘b=2’,那么eval(a)的效果就是b=2.

⑦sort函数,我见过这样用的,[scores,index]=sort(scores,‘descend’);既排好序,又给出索引 (这个大程序,回头多琢磨琢磨) 。

⑧tic toc,我见过这么用的 a=tic;

                                                  ……

                                                  a=toc(a);

⑨round函数,Y = round(X) 将 X 的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰为 0.5 时,round 函数会偏离零四舍五入到具有更大幅值的整数。注意 是更大幅值,比如-3.5偏成-4.

⑩squeeze函数,删除矩阵中size位1的那个维度。比如a是一个102×102×2的,那么运行b=squeeze(a(:,:,2));之后,b就是102×102了

11、a(:)的意思,比如a=[1 2;3 4],那么a(:)= [1 3 2 4]

12、repmat函数,B = repmat(A,m,n),就是在B中放置m×n个A,横着放m个A,竖着放n个A,具体见例子如下(我拷的别人的)

         >>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

元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。

关于cell的创建:

1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]“改成了}”{}"

2.使用cell创建cell,C= {C1 C2},这里C1和C2都是cell类型,直接把C1 C2作为一个cell得到的C3是一个1x2的cell数组;使用C3 = [C1 C2],是使用C1和C2的内容来创建cell数组

3.使用cell函数,A=cell(2,2),创建一个空的2x2的cell矩阵.

用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。

关于cell的访问:

1.X = C(s)使用这种"()"形式的返回的是cell类型

2.X = C{s}使用这种"{}"形式的返回的是cell中的内容

3.其他的基本上与通常的数组.矩阵访问一样了

4.A{1,1}(2,3:end)访问的是A中的第一个cell里面内容的第2行的第三个元素以后的所有元素

5.A{1,3}.name访问的是A中的A{1,3}cell里面结构的name值

6.cell的图形化显示使用命令cellplot(A)即可

元胞数组的数据获得:

从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{1,2}表示元胞数组中第一行第二列的元胞。

a={20,‘matlab’;ones(2,3),1:3}
a =
[ 20] ‘matlab’

[2x3 double]    [1x3 double]

str=a(1,2)
str =
‘matlab’

class(str)
ans =
cell

str=a{1,2}
str =
matlab

class(str)
ans =
char

()和{}有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。

a =
[ 20] ‘matlab’

[2x3 double]    [1x3 double]

a{2,1}(2,2)
ans =
0.9134

a{2,1}(2,3)
ans =
0.0975

a{1,2}(2)
ans =

a
使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。

a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]
a =
[1] [2] [3]

[4]    [5]    [6]

[7]    [8]    [9]

b=a(2:3,2:3)
b =
[5] [6]

[8]    [9]

c=a(1:3,2:3)
c =
[2] [3]

[5]    [6]

[8]    [9]

 本例使用元胞下标的方式创建了新的元胞数组b和c,通过结果看出b和c就是元胞数组a的一部分。

关于cell的删除和重塑:

1.cell(1)=[]删除第一个cell,不能使用cell{1}=[],这是把第一个cell内容置空没有删除

C4={C1,C2,C3}

C4 =

{3x2 cell}    {3x3 cell}    {3x1 cell}

C4(1)=[]

C4 =

{3x3 cell}    {3x1 cell} 

2.cell(:)=[]删除所有的cell,其他的删除一次类推

C4(:)=[]

C4 =

 {}

3.使用reshape重新reshape cell arrays

A={1,2,3}

A =

[1]    [2]    [3]

B = reshape(A, 1, 3);
B = reshape(A, 3, 1);
B = reshape(A, 2, 6);
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
使用reshape需要保证前后调整后的元素个数一致,否则会报错

元胞数组中的操作函数
cell:创建空的元胞数组

  cellfun:为元胞数组的每个元胞执行指定的函数

  celldisp:显示所有元胞的内容

  cellplot:利用图形方式显示元胞数组

  cell2mat:将元胞数组转变成为普通的矩阵

  mat2cell:将数值矩阵转变成为元胞数组

  num2cell:将数值数组转变成为元胞数组

  deal:将输入参数赋值给输出

  cell2struct:将元胞数组转变成为结构

  struct2cell:将结构转变为元胞数组

  iscell:判断输入是否为元胞数组

a={20,‘matlab’,3-7i;ones(2,3),1:3,0}

a =

[        20]    'matlab'        [3.0000 - 7.0000i]
[2x3 double]    [1x3 double]    [               0]

b=cellfun(‘isreal’,a)

b =

 1     1     0
 1     1     1

c=cellfun(‘length’,a)

c =

 1     6     1
 3     3     1

d=cellfun(‘isclass’,a,‘double’)

d =

 1     0     1
 1     1     1

(函数的应用)

cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。 

能在cellfun中使用的函数:

isempty:若元胞元素为空,则返回逻辑真

islogical:若元胞元素为逻辑类型,则返回逻辑真

isreal:若元胞元素为实数,则返回逻辑真

length:元胞元素的长度

ndims:元胞元素的维数

prodofsize:元胞元素包含的元素个数 

元胞数组的嵌套

元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。

a=cell(1,2)

a =

 []     []

a(1,2)={cell(2,2)}

a =

 []    {2x2 cell}



  >> a(1,1)={magic(3)};

a{1,2}(1,1)={[1 2 3;4 5 6;7 8 9]};
a{1,2}(2,1)={[2-i;4+7i]};
a{1,2}(2,2)={cell(1,2)};
a{1,2}{2,2}(2)={5};

cellplot(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值