我有一个向量A,我希望尽可能均匀地填充值。例如,如果A是1x30并且我想使用三个值,我将使用如下代码:
% A = zeros(1,30);
A([1:10])=0;
A([11:20])=1;
A([21:30])=2;
这有效,但对我来说似乎有点麻烦。有没有更优雅的方法来均匀(尽可能)在向量中分配指定范围的值?我打算将每个值保存在“clumps”中。
先谢谢你。
答案 0 :(得分:2)
假设您希望在长度为8的向量上尽可能均匀地分布值[5 2 6]
。然后您可以通过以下方式使用linspace
:
vals = [5 2 6];
vecLength = 8;
nVals = length(vals);
idx = floor(linspace(1,nVals+1-2*eps(nVals),vecLength));
out = vals(idx)
out =
5 5 5 2 2 6 6 6
答案 1 :(得分:1)
我会从另一个方向接近问题。定义所需的值,定义矢量大小,根据需要多次复制矢量以获得矩阵,并删除“过多”元素:
range = [1 3 5 7 9]';
vsize = 52;
% number of repetitions
rep = ceil(vsize/numel(range));
% replicate the range vector;
result = repmat(range, 1, rep);
% cut the the excessive elements
result(vsize+1:end) = NaN;
result = reshape(result', 1, []);
result(isnan(result)) = [];
分布尽可能均匀,即从该范围出现的数量差异最多为1.