0

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

在此处输入图像描述

4

2 回答 2

1

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

mat = (50 < seals(:, 3, 1)) & (seals(:, 3, 1) < 100)
vec = mat(:);
于 2013-03-12T04:21:59.047 回答
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(:);

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

于 2013-03-13T15:25:09.297 回答