如何从3D数组中沿固定维度的元素中获取矢量?

时间:2019-06-11 08:55:18

标签: matlab

我在MATLAB中有一个3D数组,如下所示:

val(:,:,1) =
    1.1461    2.3993
    2.3993   15.4036

val(:,:,2) =
    1.0041    0.8106
    0.8106   10.6503

val(:,:,3) =
    1.0001    0.9895
    0.9895    3.0384

val(:,:,4) =
    1.0024    0.9936
    0.9936    2.0169

这是一个2 x 2 x 600数组。我想要600个“矩阵”中的每个第二个元素。有没有一种简单的方法可以在MATLAB中提取它们?

我想要的输出是这样的:

output = [ 2.3993; 0.8106; 0.9895; 0.9936 ];

到目前为止,我的尝试是:

val(1, 2, :)

但是,这返回:

ans(:,:,1) =
    2.3993

ans(:,:,2) =
    0.8106

ans(:,:,3) =
    0.9895

ans(:,:,4) =
    0.9936

我需要这些值作为向量。

1 个答案:

答案 0 :(得分:1)

您访问val(1, 2, :)的方法是正确的。不过,产生的输出大小为1 x 1 x 4。您要做的是删除长度为1的(不必要的)尺寸。这就是squeeze函数的作用。

像您的数组和固定索引valx的3维数组y一样,我们只用squeeze包围您的命令:< / p>

% 3-dimensional array
val = reshape(1:36, 3, 3, 4)

% Squeezed output for fixed x, y in dimensions 1 and 2
x = 1;
y = 2;
out3d = squeeze(val(x, y, :))

输出如下:

val =

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

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

ans(:,:,3) =
   19   22   25
   20   23   26
   21   24   27

ans(:,:,4) =
   28   31   34
   29   32   35
   30   33   36

out3d =
    4
   13
   22
   31

这适用于任意尺寸和索引数。

具有两个固定索引的4维数组将产生2维输出:

% 4-dimensional array
val = reshape(1:108, 3, 3, 4, 3)

% Squeezed output for fixed x, y in dimensions 1, 2
x = 1;
y = 2;
out4d = squeeze(val(x, y, :, :))

输出:

val = (omitted here)

out4d =
     4    40    76
    13    49    85
    22    58    94
    31    67   103

具有三个固定索引的4维数组将再次产生1维输出:

% 4-dimensional array
val = reshape(1:108, 3, 3, 4, 3)

% Squeezed output for fixed x, y, z in dimensions 1, 2, 3
x = 1;
y = 2;
z = 1;
out4d = squeeze(val(x, y, z, :))

输出:

val = (omitted here)

out4d =
    4
   40
   76

希望有帮助!