これを行う明白な方法は、次のようになります。
s=zeroes(size(x,1), 1);
s(x>=BP(1) & x<BP(2)) = 1;
s(x>=BP(2)) = 2;
etc.
ここで、BP はブレーク ポイント (つまり、パーティションの端) のリストです。これにより、BP(1) 未満のすべてが 0 になり、BP(1) と BP(2) の間のすべてが 1 になり、BP(2) を超えるエントリは 2 になります。
このようなものもうまくいくはずだと思います:
s = zeroes(size(x,1), 1];
for ii=1:length(BP)
idx = x > BP(ii);
s(idx) = s(idx) + 1;
end
データやビンのサイズに制約がある場合は、より多くのオプションがあります。乗算、除算、および丸め/切り捨ての巧妙な組み合わせを考えるかもしれません。たとえば、データがすべて [0, 1) の範囲にあり、それを等間隔の 20 個のビンに分割したいとします。次に、次のようなことができます。
s = floor(x(:,1) .* 20);
これにより、s は 0 から 19 の間の値になります。データがまだその間隔内にない場合は、明らかに最初に再スケーリングできます。
data = x(:,1);
data = data - min(data);
data = data ./ (max(data) + eps(max(data)));
s = floor(data .* 20);
ここで、3 行目の正規化係数は max(data) ではなく、matlab が表現できる次の最大数であることに注意してください。21 ではなく 20 のグループになるようにします。