如何将一系列3D阵列中的元素分配到单个矢量中?

时间:2013-03-12 04:08:06

标签: matlab

所以我希望第三列的所有6个元素都进入6个元素的向量。我该怎么做?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用(:)运算符将nD矩阵折叠为单个向量。对于您的示例,请执行以下操作:

mat = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
vec = mat(:);

答案 1 :(得分:0)

首先,您不能使用比较运算符来比较您所采用的区间。我建议你尝试运行这段代码:

x = 1:10;
4 < x < 7

在我的系统上,我得到答案

ans =

 1     1     1     1     1     1     1     1     1     1
我怀疑,这不是你想要的。解决方案就是像这样划分你的条件

(4 < x) & (x < 7)

ans =

 0     0     0     0     1     1     0     0     0     0

正如所料。

现在,回到你的实际问题。如果您知道结果向量应该有多少元素,那么您可以使用reshape

mask = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
x = nanmean(seals(mask, :, :));
v = reshape(x(:, 3, :), 6, 1);

但是,在这种情况下,您使用搜索条件来查找要选择的值,因此可能事先不知道最终矢量的长度。另一个选择是首先检索所需的值,然后使用冒号运算符(:)将它们重新整形为向量,如下所示:

mask = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
x = nanmean(seals(mask, :, :));
y = x(:, 3, :);
v = y(:);

在这两种情况下,我还引入了一个单独的选择掩码,以略微提高可读性。