5

ベクトル A があり、できるだけ均等に値を入力したいと考えています。たとえば、A が 1x30 で、3 つの値を使用したい場合、次のようなコードを使用します。

% 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 に答える