MATLAB学习(一)数组的基本操作

数组基本操作

有 * 号我暂时不知道有什么用,可先不管。

一般使用方括号 “[ ]” 、逗号 “ , ” 或空格、分号 “ ; ” 来创建数组。方括号中为数组元素,元素间用逗号或空格分隔,不同行之间用分号分隔。与一般编程语言不同,此语言数组下标从1开始。

数组简单的创建

A=[]; %空数组

A=[1 2,3]; %三个元素的数组

A=[1;2;3];%三行,每行一个数

A=1:2:5;%1为首项,每次加2,到小于等于5,为1 3 5

A=1:4; %1开始,默认间隔为1,到小于等于4

A=linspace(1,2,4);% 12平均分为四个数1.0000,1.3333,1.6667,2.0000

A=logspace(0,log10(32),6);
%(首项,末项,总项数),10^首项到10^末项包含n个元素的等比一维数组。
%不指定n时默认为50, 上结果为1.0000 2.0000 4.0000 8.0000 16.0000 32.0000

A=[1,2,3,4,5;6:10;linspace(11,15,5)];%3*5数组

A=[[1:5];[linspace(6,10,5);[11 12 13 14 15]]; 
%此虽然看上去比上一条多三对括号,但实际效果相同。

A(2,2,2)=1;%圆括号指示下标,没有A数组时新建三维数组,使(2,2,2)为1.(当然也能设为0,则全零数组)

数组拼接

横、纵向拼接

比如我们想将两个1601603图片肩并肩拼在一起。

B(160,160,3)=1;
C(160,160,3)=2;%就当是两个图片
C=[C,B];%把B拼在C右边。
B=[B,C];%再把C拼在B右边

如果想要竖着拼,把中间的逗号改为分号就好。
经测试,拼接时维度要一样(即第三维度相等,横着拼时行要一样,纵着拼时列要一样)。

低维到高维直接拼接
D2=[1 2 3;4 5 6,7 8 9];
D3(:,:,1)=D2;%只有一个冒号的代表此维度。
D3(:,:,2)=2*D2;
D3(:,:,3)=3*D2; %这样三层2维数组拼成一个3维数组。
%当然也可以拼n维数组,只要可以弄清楚,比如D4=(:,:,1,1)=D2;或者D4=(:,:,:,1)=D3;
cat函数拼接

cat有一个好用之处就在于它可以进行同纬度的拼接,如将三个3*3*3数组拼成3*3*9数组。

先说低维拼高维

直接借用之前已经设好的三维数组D3拼4维的数组

D4=cat(4,D3,D3*2,D3*3); %3维数组拼4维的,得到3*3*3*3的数组
%也可以用其他维数数组拼。由于拼接位置在第四维,故会默认创建一个只有一个元素的第三维度。如把本条的D3改为D2,则会得到D4(:,:,1,1)、D4(:,:,1,2)、D4(:,:,1,3),前两个维度的内容就是D2内容。
再说同维度拼接(在最高维度上)
D31=cat(3,D3,D3*2,D3*3); %可以得到3*3*9的矩阵

数组重复堆砌*

使用repmat ( A, [m, n, p…] )来重复拼数组(不用中括号,一个维度一个逗号也行)。A为要堆的数组,后方框中为地1、2、3…个维度需要堆砌的个数。例子如下:

A=[1,2;3,4];
B=repmat(A,[2,3,4]); %下面是B的展示
%B(:,:,1) =

%     1     2     1     2     1     2
%     3     4     3     4     3     4
%     1     2     1     2     1     2
%     3     4     3     4     3     4
% 一共有4层。

数组变形*

reshape

使用reshape ( A, [m, n, p…] ) 来把之前的A变为各维度分别为m,n,p 的数组。数据数必须与之前相同。
规则为从A(1,1,1)开始,一列一列数,再一层一层数,按照同样的顺序排列。如[1 2 3 4; 5 6 7 8; 9 10 11 12]顺序为1 5 9 2 6 10 3 7 11 4 8 12。

>>B=reshape(A,[2,2,3])
B(:,:,1) =

     1     9
     5     2


B(:,:,2) =

     6     3
    10     7


B(:,:,3) =

    11     8
     4    12
squeeze

这个函数可以将某些只有一个元素的维度去掉。比如之前cat函数中拼出的D4,第三维度只有一个元素,于是运行后第四维就能变成第三维度。

D32=squeeze(D4); %这是用法
permute与ipermute

permute函数可以将高维数组的维度调换顺序。ipermute则是permute的逆操作。使用方法为:

>> A=randn(3,3,2)

A(:,:,1) =

    0.2877    1.1892    0.1746
   -1.1465   -0.0376   -0.1867
    1.1909    0.3273    0.7258


A(:,:,2) =

   -0.5883    0.1139   -0.0956
    2.1832    1.0668   -0.8323
   -0.1364    0.0593    0.2944

>> B=permute(A,[3,1,2])%新的第123维度分别是原来的312维度。

B(:,:,1) =

    0.2877   -1.1465    1.1909
   -0.5883    2.1832   -0.1364


B(:,:,2) =

    1.1892   -0.0376    0.3273
    0.1139    1.0668    0.0593


B(:,:,3) =

    0.1746   -0.1867    0.7258
   -0.0956   -0.8323    0.2944

>> ipermute(B,[3,1,2])

ans(:,:,1) =

    0.2877    1.1892    0.1746
   -1.1465   -0.0376   -0.1867
    1.1909    0.3273    0.7258


ans(:,:,2) =

   -0.5883    0.1139   -0.0956
    2.1832    1.0668   -0.8323
   -0.1364    0.0593    0.2944

标准数组创建

A=zeros(3,2); %32列零数组
B=ones(2,4); %24列一数组
C=eye(4); %4*4单位矩阵,但不能建高维的(应该也算数组吧...)
D=magic(5); %5阶幻方,不能建高维的(就是行列斜线和相等那个)
E=randn(3,4); %3*4平均数为0,单位方差的随机数组
F=rand(3,4); 013*4数组
G=gallery(5); %一个有趣的函数,可以生成特定特征的矩阵。

获取多维数组属性以及一些简单计算

获取一些数组信息:

size(A); %按照行、列、页的顺序返回数组每一维度大小。
ndims(A); %返回数组A的维度值
whos %显示当前工作区各变量详细信息。

有关数组的简单计算:
sum对第一个不为1的维度上的向量进行求和。
sin、cos等为对每一个元素进行的计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值