填充一个数组,其中一部分线性递增,其余部分被截断



我正在尝试用值填充大小为 1 x 200 的数组。我希望数组以 6 为步长填充从 0 到 216 的值,然后在数组的其余部分保持值不变 (216)。

我该怎么做?

一种方法是最初以 6 为步长创建一个从 0 到 216 的数组,然后连接 216 的数组,直到达到 200 个值。

像这样:

out = 0:6:216;
N = 200;
out(end+1:end+N-numel(out)) = 216;

另一种方法是创建 200 个 216 的值,然后填充替换数组的值从 1 到 216/6 = 36 并添加 1,因为我们包括 0;用所需的数组填充它:

N = 200; stop = (N/6) + 1;
out = 216*ones(1,N);
out(1:stop) = 0:6:216;

最后,另一种方法是创建一个从 0 到 200 的数组,将所有大于 36 的值截断为 36,然后将结果乘以 6:

N = 200;
out = 0:N;
out(out > 36) = 36;
out = 6*out;

。至于完整性,您可以使用min 1 执行此操作:

out = min(0:199,36)*6;

调用min的两个参数输出两个大小兼容的数组之间每个元素的第一个和第二个输入的最小值。 如果任何输入是常量,则将此常量与数组中的所有元素进行比较。 此代码的解释是生成一个从 0 到 199 的数组,然后我们保留任何小于 36 的值,但任何大于 36 的值都保持在 36。然后我们将结果乘以 6 得到结果。

1:这个答案的功劳归于用户Stewie Griffin在删除他的答案之前。 为了完整起见,我决定把它放进去。

arr = min(0:6:(6*199),216);

应该工作或:

arr = min((0:199)*6,216);

最新更新