所以我希望第三列的所有6个元素都进入6个元素的向量。我该怎么做?
答案 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(:);
在这两种情况下,我还引入了一个单独的选择掩码,以略微提高可读性。