我在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
我需要这些值作为向量。
答案 0 :(得分:1)
您访问val(1, 2, :)
的方法是正确的。不过,产生的输出大小为1 x 1 x 4
。您要做的是删除长度为1的(不必要的)尺寸。这就是squeeze
函数的作用。
像您的数组和固定索引val
,x
的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
希望有帮助!