2012-10-28 25 views
5

我有一個向量A,我想用盡可能均勻的值填充它。例如,如果A是1X30,我想用三個值我會用這樣的代碼如下:均勻分佈向量中指定值的範圍

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

這工作,但似乎有點麻煩我。是否有一種更優雅的方式來平均(儘可能)在矢量內分配指定範圍的值?我打算將每個值都保留在「叢」中。

非常感謝您提前。

回答

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 
+0

喬納斯,'-2 * eps'似乎還不夠。它不適用於我的示例。否則一個很酷的主意! – angainor

+0

@angainor:的確,它應該是'2 * eps(nVals)'。現在修復。 – Jonas

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.