欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-21 16:55:58
...

cell函数总结
元胞数组:

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)