matlab学习一数组

matlab学习一 数组

创建一维数组

用[]方括号号表示数组
一维数组行向量元素用空格,逗号分隔,列向量元素用分号分割,或者对行向量用 ’ 进行转置得到。
总结: 创建一维数组可能用到的是方括号[] 冒号:空格 逗号 分号,函数linspace和logspace

a = [] ;  % 把变量赋值为空的方括号即可创建空的数组
b = [1 2 3 4] ; 
c = [1,2,3,4];
d = b';    % 转置

用冒号 : 函数linspace 和 logspace创建一维数组
a = start:step:stop;
这里创建从start到stop,步长为step的一维数组。当最后一个元素与stop的差的绝对值小于等于step的绝对值时停止。不指定步长step时,默认为1.
linspace(start,stop,n)生成线性间距向量。与冒号 : 的区别是可以直接控制点数并始终包括端点

a = 1:3:10;
%{  执行结果
a =

     1     4     7    10
%}
a = linspace(1,10,4);   % 生成以1为开始,以10为结束,共4个元素的等差一维数组

logspace(start,stop,n)生成对数间距向量,不指定n时默认是50。

logspace(0,log10(32),6)
%{
ans =

    1.0000    2.0000    4.0000    8.0000   16.0000   32.0000
    %}

创建二维数组

用方括号把所有元素括起来,不同行之间元素用分号分割,同一行元素之间用空格或逗号分割。需要注意的是每行每列的元素个数要相同
按照逐行方式书写每个元素。在创建同行元素时仍然可以像创建一维数组那样使用冒号: 函数linspace和logspace

a = [1 2 3;4 5 6;7 8 9]
b = [1:3; linspace(1,9,3); logspace(0,log10(9),3)]
%{
b =

     1     2     3
     1     5     9
     1     3     9
%}
% 使用拼接方法创建数组
c = [a;b]   % 逗号分割是行拼接
%{
c =

     1     2     3
     4     5     6
     7     8     9
     1     2     3
     1     5     9
     1     3     9
     %}
c = [a,b]   % 分号分割是列拼接
%{
c =

     1     2     3     1     2     3
     4     5     6     1     5     9
     7     8     9     1     3     9
%}

1.cat
沿指定维度串联数组
语法
C = cat(dim, A, B)
C = cat(dim, A1, A2, A3, A4, …)
对于⾮空数组,cat(2, A, B) 与 [A, B] 相同,cat(1, A, B) 与 [A; B] 相同。如下:

c = cat(2, a, b)

%{
c =

     1     2     3     1     2     3
     4     5     6     1     5     9
     7     8     9     1     3     9
     %}
c = cat(1,a,b)

%{
c =

     1     2     3
     4     5     6
     7     8     9
     1     2     3
     1     5     9
     1     3     9
     %}
     
  1. vertcat 垂直串联数组
    语法
    C = vertcat(A1,…,AN)
  2. horzcat ⽔平串联数组
    语法
    C = horzcat(A1,…,AN)
vertcat(a,b)
%{
ans =

     1     2     3
     4     5     6
     7     8     9
     1     2     3
     1     5     9
     1     3     9
%}
 horzcat(b,a)
%{
ans =

     1     2     3     1     2     3
     1     5     9     4     5     6
     1     3     9     7     8     9
     %}

创建三维数组

在MATLAB中,习惯性的将二维数组的第一维称为“行”,第二维称为“列”,而于三维数组,其第三维习惯性地称为“页”。

定义一个三维数组:

A(2,2,2) 表示A是一个两行两列两页的数组 A(i,j,k)(i,j,k分别表示行,列,页)

1,使用下标引用方式创建三维数组
for i=1:2     
for j=1:2
for k=1:2
A(i,j,k)=i+j+k;  %A表示i行j列k页的三维举证 利用循环给A中元素赋值
end
end
end

输出结果
val(:,:,1) =

 3     4
 4     5

val(:,:,2) =

 4     5
 5     6
 分析:

对于循环 i=1,j=1,k=1时A(1,1,1)=1+1+1=3;(A(1,1,1)表示第一页中第一行第一列位置,图1中“3”)

           i=1,j=1,k=2时A(1,1,2)=1+1+2=4;(A(1,1,2)表示第2页中第一行第一列位置,图2中“4”)

           i=1,j=2,k=1时A(1,2,1)=1+2+1=4;(A(1,2,1)表示第1页中第一行第二列位置,图1中“4”)

           i=1,j=2,k=2时A(1,2,2)=1+2+2=5;(A(1,2,2)表示第2页中第一行第二列位置,图2中“5”)

其余结果依此类推
————————————————
版权声明:此处为优快云博主「我看看还有谁没在学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/m0_66263252/article/details/124463487
创建新的高维数组

B(3,4,:)=2:5;

结果为:
三行四列第一页
val(:,:,1) =

 0     0     0     0
 0     0     0     0
 0     0     0     2

三行四列第二页
val(:,:,2) =

 0     0     0     0
 0     0     0     0
 0     0     0     3

三行四列第三页
val(:,:,3) =

 0     0     0     0
 0     0     0     0
 0     0     0     4

三行四列第四页
val(:,:,4) =

 0     0     0     0
 0     0     0     0
 0     0     0     5
2 , 用低维数组创建三维数组

使用低维数组创建高维数组

A1 = [1,2,3;4,5,6;7,8,9];
B1(:,:,1)=A1;
B2(:,:,2)=2*A1;     % 把A1中每个元素乘以2,放入到B2的第二页,此时B2是三行三列2页的数组
B3(:,:,1)=3*A1;
B3(:,:,2)=2*A1;
B3(:,:,3)=A1;

输出结果:其中B2是:
val(:,:,1) =

 0     0     0
 0     0     0
 0     0     0

val(:,:,2) =

 2     4     6
 8    10    12
14    16    18

B3的结果是:
val(:,:,1) =

 3     6     9
12    15    18
21    24    27

val(:,:,2) =

 2     4     6
 8    10    12
14    16    18

val(:,:,3) =

 1     2     3
 4     5     6
 7     8     9
3 , 用函数创建三维数组
(1)用cat创建高维数组。

前面已经提到cat命令的功能是连接数组,其调用格式是cat(dim,A1,A2,A3,······),其中dim表示创建数组的维度,A1,A2,A3表示各维度上的数组。

A1 = [1,2,3;4,5,6;7,8,9];
C = cat(3,A1,2*A1,3*A1);

C 的运行结果:
val(:,:,1) =

 1     2     3
 4     5     6
 7     8     9

val(:,:,2) =

 2     4     6
 8    10    12
14    16    18

val(:,:,3) =

 3     6     9
12    15    18
21    24    27
C(1,2,2)     % 取第一页第一行第二列的元素

ans =

     4
(2)使用repmat函数创建数组

repmat的功能是复制并堆砌数组,调用格式repmat(A, [m,n,p,·····]),A表示复制的数组模块,[m,n,p,·····]表示数组模块A在各个维度上的复制个数,如下:

A1 = [1,2,3;4,5,6;7,8,9];
C1 = repmat(A1,2,3);     % 在行上复制2次A1,在列上复制3次A1
C2 = repmat(A1,[1,2,3]);    % 在行上复制1次,在列上复制2次,有3页

C1的运行结果
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9
C2的运行结果
val(:,:,1) =

 1     2     3     1     2     3
 4     5     6     4     5     6
 7     8     9     7     8     9

val(:,:,2) =

 1     2     3     1     2     3
 4     5     6     4     5     6
 7     8     9     7     8     9

val(:,:,3) =

 1     2     3     1     2     3
 4     5     6     4     5     6
 7     8     9     7     8     9
(3)使用reshape命令创建数组

reshape命令的功能是修改数组的大小,格式为reshape(A,[m,n,p,······] 其中A是待重组的矩阵,后面表示数组各维的维度

D1 = [1,2,3,4;5,6,7,8;9,10,11,12];
D2 = reshape(D1,2,2,3);     % 将D1变为2行2列3页的数组
D3 = reshape(D1,[2,3,2]);      % 将D1变为2行3列2页的数组

D2的执行结果
val(:,:,1) =

 1     9
 5     2

val(:,:,2) =

 6     3
10     7

val(:,:,3) =

11     8
 4    12

D3的执行结果
val(:,:,1) =

 1     9     6
 5     2    10

val(:,:,2) =

 3    11     8
 7     4    12

创建低维标准数组

在这里插入图片描述

多维数组的属性和操作

(1)多维数组的属性
数组属性函数用法函数功能
尺寸size(A)按照行列页的顺序,返回数组A每一维上的大小-
维度ndims(A)返回函数A具有的维度值
内存占用/在这里插入代码片数据类型whos返回当前工作区的各个变量的详细信息
 A= cat(4,[9 2;6 5],[7 1;8 4])    % 4是维数

A(:,:,1,1) =

     9     2
     6     5


A(:,:,1,2) =

     7     1
     8     4

>> size(A)

ans =

     2     2     1     2

>> ndims(A)   %获取数组A的维度属性

ans =

     4

>> whos
  Name      Size               Bytes  Class     Attributes

  A         2x2x1x2               64  double              
  ans       1x1                    8  double              

(2)多维数组的操作

数组的操作有索引,重排,计算等
Matlab中索引多维数组的方法包括多下标索引和单下标索引。
对于n维数组可以用n个下标索引访问到一个特定位置的元素,而用数组或者冒号来代表其中某一维,则可以访问指定的多个元素。单下标索引方法则是通过一个下标来定位多维数组中 某个元素的位置。
Matlab中是按照行-列-页的顺序把数组中的元素线性存储起来,故可以知道一个特定到的单下标对应的多维 下标位置。

A = rand(4,5,3);
A(3,2,2);    %访问A的第2页的第三行第二列的元素
A(27);       % 访问A到的第27个位置元素
A(3,1,:);

A= rand(4,5,3)

A(:,:,1) =

0.7513    0.8909    0.1493    0.8143    0.1966
0.2551    0.9593    0.2575    0.2435    0.2511
0.5060    0.5472    0.8407    0.9293    0.6160
0.6991    0.1386    0.2543    0.3500    0.4733

A(:,:,2) =

0.3517    0.9172    0.3804    0.5308    0.5688
0.8308    0.2858    0.5678    0.7792    0.4694
0.5853    0.7572    0.0759    0.9340    0.0119
0.5497    0.7537    0.0540    0.1299    0.3371

A(:,:,3) =

0.1622    0.1656    0.6892    0.2290    0.5383
0.7943    0.6020    0.7482    0.9133    0.9961
0.3112    0.2630    0.4505    0.1524    0.0782
0.5285    0.6541    0.0838    0.8258    0.4427

A(3,2,2)

ans =

0.7431

A(3,1,:)

ans(:,:,1) =

0.1270

ans(:,:,2) =

0.8491

ans(:,:,3) =

0.7655

维度操作包括对多维数组的形状的重排和维度的重新排序。
reshape函数可以改变多维数组的形状
squeeze函数可以用来消除单值维度(即某个维度上只有一个元素)

B= reshape(A,10,6)

B =

    0.7513    0.8407    0.3517    0.0759    0.1622    0.4505
    0.2551    0.2543    0.8308    0.0540    0.7943    0.0838
    0.5060    0.8143    0.5853    0.5308    0.3112    0.2290
    0.6991    0.2435    0.5497    0.7792    0.5285    0.9133
    0.8909    0.9293    0.9172    0.9340    0.1656    0.1524
    0.9593    0.3500    0.2858    0.1299    0.6020    0.8258
    0.5472    0.1966    0.7572    0.5688    0.2630    0.5383
    0.1386    0.2511    0.7537    0.4694    0.6541    0.9961
    0.1493    0.6160    0.3804    0.0119    0.6892    0.0782
    0.2575    0.4733    0.5678    0.3371    0.7482    0.4427

permute函数可以按照指定顺序重新定义多维数组的维度顺序。是把原来在某一维度上的所有元素移动到新的维度上,这会改变多维数组线性存储的位置,这是permute和reshape的区别。
ipermute看做是permute 的逆函数。

A = randn(3,3,2)

A(:,:,1) =

   -1.2078    1.3790   -0.2725
    2.9080   -1.0582    1.0984
    0.8252   -0.4686   -0.2779


A(:,:,2) =

    0.7015   -0.8236    0.2820
   -2.0518   -1.5771    0.0335
   -0.3538    0.5080   -1.3337

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

B(:,:,1) =

   -1.2078    2.9080    0.8252
    0.7015   -2.0518   -0.3538


B(:,:,2) =

    1.3790   -1.0582   -0.4686
   -0.8236   -1.5771    0.5080


B(:,:,3) =

   -0.2725    1.0984   -0.2779
    0.2820    0.0335   -1.3337

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

ans(:,:,1) =

   -1.2078    1.3790   -0.2725
    2.9080   -1.0582    1.0984
    0.8252   -0.4686   -0.2779


ans(:,:,2) =

    0.7015   -0.8236    0.2820
   -2.0518   -1.5771    0.0335
   -0.3538    0.5080   -1.3337

(3) 多维数组参与数学计算

sum和mean函数对多维数组中第一个不为1的维度上的向量进行计算;
sin,cos等函数对多维数组中的每个单独元素进行计算
eig针对二维数组的运算函数需要用指定的页面上的二维数组作为输入函数。

在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种:

(1)E=eig(A):求矩阵A的全部特征值,构成向量E。
(2)[V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3)[V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
(4)E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E。
(5)[V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向量构成N×N阶满秩矩阵,且满足AV=BVD。

 A = randn(2,5,2)

A(:,:,1) =

    1.1275   -0.2991   -0.2620   -0.2857   -0.9792
    0.3502    0.0229   -1.7502   -0.8314   -1.1564


A(:,:,2) =

   -0.5336    0.9642   -0.0200   -0.7982   -0.1332
   -2.0026    0.5201   -0.0348    1.0187   -0.7145

>> sum(A)

ans(:,:,1) =

    1.4777   -0.2762   -2.0122   -1.1170   -2.1356


ans(:,:,2) =

   -2.5362    1.4843   -0.0548    0.2205   -0.8477

>> mean(A)

ans(:,:,1) =

    0.7388   -0.1381   -1.0061   -0.5585   -1.0678


ans(:,:,2) =

   -1.2681    0.7421   -0.0274    0.1103   -0.4239

>> sin(A)

ans(:,:,1) =

    0.9033   -0.2946   -0.2590   -0.2818   -0.8301
    0.3431    0.0229   -0.9839   -0.7389   -0.9154


ans(:,:,2) =

   -0.5086    0.8216   -0.0200   -0.7161   -0.1328
   -0.9082    0.4969   -0.0348    0.8514   -0.6553
   
eig(A(:,[1 2],1))

ans =

    1.0228
    0.1276
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值