5

我有一个向量 A,我想用尽可能均匀的值填充它。例如,如果 A 是 1x30,并且我想使用三个值,我将使用如下代码:

% A = zeros(1,30);
A([1:10])=0;
A([11:20])=1;
A([21:30])=2;

这可行,但对我来说似乎有点麻烦。有没有更优雅的方法来均匀(尽可能)在向量中分布指定范围的值?我打算将每个值保持在“块”中。

预先感谢您。

4

2 回答 2

2

假设您想在[5 2 6]长度为 8 的向量上尽可能均匀地分配值。那么您可以使用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
于 2012-10-28T16:56:26.713 回答
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。

于 2012-10-28T17:03:01.603 回答