matlab如何创建多维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何创建多维数组相关的知识,希望对你有一定的参考价值。

1、打开matlab,在命令行窗口输入zeros(2,3),如下图所示。

2、按回车键之后,可以看到创建了一个2行3列的二维数组。

3、在命令行窗口输入ones(3,4),如下图所示。

4、按回车键之后,可以看到创建一个3行4列的数组,如下图所示。

5、zeros函数创建一定大小的全0数组,ones函数创建一定大小的全1数组,都可以提前定义数组大小,全0,全1相当于空数组,定义之后,可以对数组进行赋值,根据需要选择。

参考技术A

创建多维数组示例:

>>A(3,3,3)=1%创建3*3*3数组,未赋值元素默认设置为0

A(:,:,1)=

000

000

000

A(:,:,2)=

000

000

000

A(:,:,3)=

000

000

001

>>B(3,4,:)=1:4%创建3*4*4数组

B(:,:,1)=

0000

0000

0001

B(:,:,2)=

0000

0000

0002

B(:,:,3)=

0000

0000

0003

B(:,:,4)=

0000

0000

0004

扩展资料

matlab由二维数组合成多维数组

>>clear

>>A(:,:,1)=magic(4);%创建数组A第1页的数据

>>A(:,:,2)=ones(4);%创建数组A第2页的数据

>>A(:,:,3)=zeros(4)%创建数组A第3页的数据

A(:,:,1)=

162313

511108

97612

414151

A(:,:,2)=

1111

1111

1111

1111

A(:,:,3)=

0000

0000

0000

0000

参考技术B

分别演示如何分配三维数组和在第三个维度上拼接两个二维数组:

>> ones( 1, 2, 3 )

ans(:,:,1) =

     1     1


ans(:,:,2) =

     1     1


ans(:,:,3) =

     1     1

>> a = rand( 1, 3 )

a =

    0.9134    0.6324    0.0975

>> b = rand( 1, 3 )

b =

    0.2785    0.5469    0.9575

>> cat( 3, a, b )

ans(:,:,1) =

    0.9134    0.6324    0.0975


ans(:,:,2) =

    0.2785    0.5469    0.9575

本回答被提问者和网友采纳
参考技术C matlab多维数组操作

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。
2.利用标准数组函数创建多维数组
A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。
3.利用直接索引方式生成多维数组
A=zeros(2,3)
A(:,:,2)=ones(2,3)
A(:,:,3)=4
上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。
4.利用函数reshape和repmat生成多维数组
B=reshape(A,2,9)
B=[A(:,:,1) A(:,:,2) A(:,:,3)] %结果与上面一样。
reshape(B,2,3,3)
reshape(B,[2 3 3]) %结果与上面一样。
提示:reshape函数可以将任何维数的数组转变成其他维数的数组。
5.利用repmat函数生成多维数组
C=ones(2,3)
repmat(C,[1 1 3]) % repmat写出类似reshape的repmat(C,1,1,3)将显示出错
提示:repmat是通过数组复制创建多维数组的,上面的代码即是将数组C在行维和列维分别复制一次,然后再页维复制三次得到2×3×3的三维数组。
6.利用cat函数创建多维数组
a=zeros(2);
b=ones(2);
c=repmat(2,2,2);
D=cat(3,a,b,c)%创建三维数组
D=cat(4,a,b,c) %创建4维数组。
D(:,1,:,:) %查看第一列的数据。
size(D) %可以知道数组D的具体维数。
6.数组运算与处理
数组之间的运算要求两个数组在任何一维都必须具有相同的大小。
(1)squeeze函数用于删除多维数组中的单一维(即大小为1的那些维)
E=squeeze(D)
size(D) E的数据和D一样,但比D少了一维,只有2行、2列和3页。
(2)reshape函数可以将一个三维向量变成一维向量。
v(1,1,:)=1:6
squeeze(v)
v(:)
(3)reshape函数用于改变多维数组的行、列、页以及更高阶的维数,但不改变数组元素的总个数。
F=cat(3,2+zeros(2,4),ones(2,4),zeros(2,4))
G=reshape(F,[3,2,4])
H=reshape(F,[4 3 2]) 或K=reshape(F,2,12)
多维数组的重组按这样的顺序:第一页的第一列、第二列……,第二页的第一列、第二列……。
7.sub2ind函数和ind2sub函数用于多维数组的直接引用,索引顺序与重组顺序一致。
sub2ind(size(F),1,1,1) %求第1行、第1列、第1页的数值的单一索引
sub2ind(size(F),1,2,1) %求第1行、第2列、第1页的数值的单一索引
sub2ind(size(F),1,2,3) %求第1行、第2列、第3页的数值的单一索引

[r c p]=ind2sub(size(F),19) %由单一索引求其对应的行列页数值。
8.函数flipdim用于多维数组的翻转,相当于二维数组中的flipud和fliplr函数。例如下面的代码进行按行、列和按页翻转。
M=reshape(1:18,2,3,3)
flipdim(M,1) %每一页中的行翻转
flipdim(M,2) %每一页中的列翻转
flipdim(M,3) %将第一和第三页翻转调换
9.函数shiftdim用于循环轮换一个数组的维数。如果一个数组r行、c列和p页,则循环轮换一次,就生成一个c行、p列和r页的数组。
M %重新调用
shiftdim(M,1) %轮换一次
shiftdim(M,2) %轮换两次
数组轮换后规律很难直观理解,我们可以将三维数组看成一个类似魔方的方形盒子
函数shiftdim也支持负的循环轮换次数。执行该轮换时,数组的维数增加,并且多出的维数均为单一维。
M %重新调用
size(M)
shiftdim(M,-1)
size(ans).
10.函数permute和ipermute用于实现多维条件下的转置操作。从本质上讲permute函数是shiftdimhas函数的扩展。
M %重新调用
permute(M,[2 3 1])
shiftdim(M,1) %两者结果一样
permute函数中的参数[2 3 1]表示使函数第二维成为第一维,第三维成为第二维,第一维成为第三维。
11. permute(M,[2 1 3])
[2 1 3]表示将数组的行列相互转置,页保持不变(只在第一和第二维转置)。
permute函数的第一个参数为待转置的数组,第二个参数为转置顺序,它必须是待转置的多维数组的维数的某种排列,否则所进行的转置无法进行。
permute函数也可以用来将一个数组变成更高维的数组,例如shiftdim(M,-1)也可以用permute函数来实现。
permute(M,[4 1 2 3])
这是 因为任何一个数组都具有大于其本身尺寸的更高维数,并且这些维数均为单一维数。例如二维数组具有页这一维,只是只有一页。总之超过数组本身大小的维数都是单一维。M是一个三维数组,其第四维必为单一维,因此将M的第四维与第一维转置,第一维变成了单一维。
12.二维数组两次转置变换回原来的形式,对于多维数组,用函数ipermute来取消permute所执行的转置操作。
M %重新调用
permute(M,[3 2 1])
ipermute(M,[3 2 1]) %在我的Matlab上运行没有达到预期效果
13.size函数返回数组每一维的大小
numel函数返回数组的总元素个数
当不指定size的返回值时,将返回一个由数组的各维数组成的向量。当我们知道数组的维数时,可以将维数返回到指定变量中。
[r c p]=size(M)
r=size(M,1)
c=size(M,2)
p=size(M,3)
v=size(M,4)
当一个数组的维数或者某数组维数不确定时,可以利用函数ndims获得数组的维数值。例如:ndims(M),与length(size(M))等效。

Matlab的多维数组操作

MATLAB中的多维数组是指具有两个以上维度的数组。在矩阵中,两个维度由行和列表示。

每个元素由两个下标(即行索引和列索引)来定义。多维数组是二维矩阵的扩展,并使用额外的下标进行索引。例如,三维数组使用三个下标。前两个维度就像一个矩阵,而第三个维度表示元素的页数或张数。

创建多维数组

要创建多维数组,可以先创建二维矩阵,然后再进行扩展。例如,首先定义一个 3×3 矩阵,作为三维数组中的第一页。

A = [1 2 3; 4 5 6; 7 8 9]A = 3×3
     1     2     3     4     5     6     7     8     9

现在添加第二页。要完成此操作,可将另一个 3×3 矩阵赋给第三个维度中的索引值 2。语法 A(:,:,2) 在第一个和第二个维度中使用冒号,以在其中包含赋值表达式右侧的所有行和所有列。

A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]A = A(:,:,1) =
     1     2     3     4     5     6     7     8     9

A(:,:,2) =
    10    11    12    13    14    15    16    17    18

cat 函数可用于构造多维数组。例如,在 A 后以串联方式添加第三页,由此创建一个新的三维数组 B。第一个参数指示要沿哪一个维度进行串联。

B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])B = B(:,:,1) =
     1     2     3     4     5     6     7     8     9

B(:,:,2) =
    10    11    12    13    14    15    16    17    18

B(:,:,3) =
     3     2     1     0     9     8     5     3     7

快速扩展多维数组的另一种方法是将一个元素赋给一整页。例如,为数组 B 添加第四页,其中包含的值全部为零。

B(:,:,4) = 0B = B(:,:,1) =
     1     2     3     4     5     6     7     8     9

B(:,:,2) =
    10    11    12    13    14    15    16    17    18

B(:,:,3) =
     3     2     1     0     9     8     5     3     7

B(:,:,4) =
     0     0     0     0     0     0     0     0     0

访问元素

要访问多维数组中的元素,请使用整数下标,就像在向量和矩阵中一样。例如,找到 A 中下标为 1,2,2 的元素,它位于 A 的第二页上的第一行第二列。

AA = A(:,:,1) =
     1     2     3     4     5     6     7     8     9

A(:,:,2) =
    10    11    12    13    14    15    16    17    18

elA = A(1,2,2)elA = 11

在第二个维度中使用索引向量 [1 3],只访问 A 的每一页上的第一列和最后一列。

C = A(:,[1 3],:)C = C(:,:,1) =
     1     3     4     6     7     9

C(:,:,2) =
    10    12    13    15    16    18

要查找每一页的第二行和第三行,请使用冒号运算符创建索引向量。

D = A(2:3,:,:)D = D(:,:,1) =
     4     5     6     7     8     9

D(:,:,2) =
    13    14    15    16    17    18

操作数组

多维数组的元素可以通过多种方式移动,类似于向量和矩阵。reshape、permute 和 squeeze 函数可用于重新排列元素。假设有一个两页的三维数组。

重构多维数组有助于执行某些操作或可视化数据。使用 reshape 函数,将一个三维数组的元素重新排列成 6×5 矩阵。

A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2];A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3];B = reshape(A,[6 5])B = 6×5
     1     3     5     7     5     9     6     7     5     5     8     5     2     9     3     2     4     9     8     2     0     3     3     8     1     1     0     6     4     3

reshape 逐列操作,沿 A 中各列连续逐一提取元素来创建新矩阵,从第一页开始,之后是第二页。

置换操作用于重新排列数组的维度顺序。假设有一个三维数组 M。

M(:,:,1) = [1 2 3; 4 5 6; 7 8 9];M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]M = M(:,:,1) =
     1     2     3     4     5     6     7     8     9

M(:,:,2) =
     0     5     4     2     7     6     9     3     1

使用 permute 函数,通过在第二个参数中指定维度顺序,将每一页上的行下标和列下标交换。M 的原始行现在是列,原始列现在是行。

P1 = permute(M,[2 1 3])P1 = P1(:,:,1) =
     1     4     7     2     5     8     3     6     9

P1(:,:,2) =
     0     2     9     5     7     3     4     6     1

同样,将 M 的行下标和页下标交换。

P2 = permute(M,[3 2 1])P2 = P2(:,:,1) =
     1     2     3     0     5     4

P2(:,:,2) =
     4     5     6     2     7     6

P2(:,:,3) =
     7     8     9     9     3     1

操作多维数组时,可能会遇到某些数组有一个长度为 1 的多余维度。squeeze 函数可以执行另一种操作,消除长度为 1 的维度。例如,使用 repmat 函数创建一个 2×3×1×4 数组,其元素全部为 5,第三个维度的长度为 1。

A = repmat(5,[2 3 1 4])A = A(:,:,1,1) =
     5     5     5     5     5     5

A(:,:,1,2) =
     5     5     5     5     5     5

A(:,:,1,3) =
     5     5     5     5     5     5

A(:,:,1,4) =
     5     5     5     5     5     5

szA = size(A)szA = 1×4
     2     3     1     4

numdimsA = ndims(A)numdimsA = 4

使用 squeeze 函数删除第三个维度,从而得到一个三维数组。

B = squeeze(A)B = B(:,:,1) =
     5     5     5     5     5     5

B(:,:,2) =
     5     5     5     5     5     5

B(:,:,3) =
     5     5     5     5     5     5

B(:,:,4) =
     5     5     5     5     5     5

szB = size(B)szB = 1×3
     2     3     4

numdimsB = ndims(B)numdimsB = 3

 

以上是关于matlab如何创建多维数组的主要内容,如果未能解决你的问题,请参考以下文章

Matlab的多维数组操作

如何理解JS多维数组

如何在 python 中定义多维数组?

如何创建多维数组

如何创建多维数组

42-python中的矩阵多维数组----numpy