我有一個向量A,我想用盡可能均勻的值填充它。例如,如果A是1X30,我想用三個值我會用這樣的代碼如下:均勻分佈向量中指定值的範圍
% A = zeros(1,30);
A([1:10])=0;
A([11:20])=1;
A([21:30])=2;
這工作,但似乎有點麻煩我。是否有一種更優雅的方式來平均(儘可能)在矢量內分配指定範圍的值?我打算將每個值都保留在「叢」中。
非常感謝您提前。
我有一個向量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'似乎還不夠。它不適用於我的示例。否則一個很酷的主意! – angainor
@angainor:的確,它應該是'2 * eps(nVals)'。現在修復。 – Jonas