[软件使用][matlab]最近经常用到的一些函数的意思,和用法
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)
上一篇: keras中常用到的一些函数
下一篇: 静态区访问非静态变量C#