所以我希望第三列的所有 6 个元素都进入一个包含 6 个元素的向量。我该怎么做?
问问题
42 次
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 回答