Matlab 在向量中均匀分布指定值的范围

Matlab 在向量中均匀分布指定值的范围,matlab,vector,range,Matlab,Vector,Range,我有一个向量a,我想用尽可能均匀的值填充它。例如,如果A是1x30,我想使用三个值,我会使用如下代码: % A = zeros(1,30); A([1:10])=0; A([11:20])=1; A([21:30])=2; 这是可行的,但对我来说似乎有点麻烦。是否有一种更优雅的方法可以(尽可能)在向量中均匀地分布指定范围的值?我打算将每个值保存在“集群”中 请提前向您表示感谢。假设您希望在长度为8的向量上尽可能均匀地分布值[5 2 6]。然后您可以通过以下方式使用linspace: vals

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

% A = zeros(1,30);
A([1:10])=0;
A([11:20])=1;
A([21:30])=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

我会从另一个方向来处理这个问题。定义所需的值,定义向量大小,根据需要多次复制向量以获得矩阵,并删除“多余”元素:

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

乔纳斯,
-2*eps
似乎还不够。这对我的例子不起作用。否则就是一个很酷的主意@安加诺:事实上,它应该是
2*eps(nVals)
。现在修好了。