Matlab的多维数组操作

news/2024/11/30 20:40:11/

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     9A(:,:,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     9B(:,:,2) =
    10    11    12    13    14    15    16    17    18B(:,:,3) =
     3     2     1     0     9     8     5     3     7

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

B(:,:,4) = 0B = B(:,:,1) =
     1     2     3     4     5     6     7     8     9B(:,:,2) =
    10    11    12    13    14    15    16    17    18B(:,:,3) =
     3     2     1     0     9     8     5     3     7B(:,:,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     9A(:,:,2) =
    10    11    12    13    14    15    16    17    18elA = A(1,2,2)elA = 11

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

C = A(:,[1 3],:)C = C(:,:,1) =
     1     3     4     6     7     9C(:,:,2) =
    10    12    13    15    16    18

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

D = A(2:3,:,:)D = D(:,:,1) =
     4     5     6     7     8     9D(:,:,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     9M(:,:,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     9P1(:,:,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     4P2(:,:,2) =
     4     5     6     2     7     6P2(:,:,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     5A(:,:,1,2) =
     5     5     5     5     5     5A(:,:,1,3) =
     5     5     5     5     5     5A(:,:,1,4) =
     5     5     5     5     5     5szA = size(A)szA = 1×4
     2     3     1     4numdimsA = ndims(A)numdimsA = 4

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

B = squeeze(A)B = B(:,:,1) =
     5     5     5     5     5     5B(:,:,2) =
     5     5     5     5     5     5B(:,:,3) =
     5     5     5     5     5     5B(:,:,4) =
     5     5     5     5     5     5szB = size(B)szB = 1×3
     2     3     4numdimsB = ndims(B)numdimsB = 3

 


http://www.ppmy.cn/news/400534.html

相关文章

多维度分簇可视化

多维度分簇可视化 前言案例传统二维\三维图二维图三维图N维图pairplotPCA主成分分析多维度量尺(Multi-dimensional scaling, MDS)TSNE(t-distributed Stochastic Neighbor Embedding) 前言 前段时间做各种样本分簇,发…

Matlab-多维数组

示例 %% %1维数组 a1_1[1,2,3,4] a1_2[1 2 3 4] %2维数组a2[][] a_n[1 2 3 4;5 6 7 8] %多维数组,对a2x4数组进行扩展 a_n(:,:,2)[9 10 11 12;13 14 15 16] a_n(:,:,3)[17 18 19 20; 21 22 23 24]%用与其他数据相同的函数进行创建 b ones(4,4,2) c randn(2,2,3)…

一维数组转为多维数组

let replies [{ id: 1, content: qwerqwe, curparent: 0 , nextson: 1},{ id: 2, content: 去玩儿群翁, curparent: 1 , nextson: 2},{ id: 3, content: 手动阀公司的富, curparent: 2 , nextson: 3 },{ id: 4, content: 感觉和复工后, curparent: 3 , nextson: 4},{ id: 5, c…

差异可视化-多维量法(MDS)

第1关:美国国家教育统计中心数据——降维 本关任务:对美国国家教育统计中心数据计算距离矩阵,然后通过多维标度法( MDS )实现降维,并绘制降维后的散点图。 # -*- coding: utf-8 -*- import pandas as pd #用于生成满足绘图要求的数据格式 from sklearn.manifold im…

多维数组的认识

多维数组 多维数组可以看成是数组的数组(俗称:套娃),比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。二维数组 int[][] a new int[2][5];解析:以上二维数组a可以看成一个两行五列的…

多维列表

创建二维列表 一个一维的List是线性的List,多维List是一个平面的List: a [1,2,3,4,5] # 一行五列multi_dim_a [[1,2,3],[2,3,4],[3,4,5]] # 三行三列索引 在上面定义的List中进行搜索: print(a[1]) # 2print(multi_dim_a[0][1]) # 2用…

多维数组的定义

一. 多维数组 1. 概念 多维数组可以看成是数组的数组。比如二维数组就是一个特殊的一维数组,它的每个元素都是一个一维数组。其他多维数组的概念,大家可以参照二维数组以此类推。 2. 分类 多维数组可以分为: ● 二维数组; ● 三维…

数据的维度

数据:数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。 维度:一组数据的组织形式 对于一组数据,我们可以在一维方向展开,形成线性关系;我们也…