问题
I have following code that was given to me, but I am not sure at all as to what the logic here is. The idea, I believe, is that this will histogram/quantize my data. Here is the code:
The input:
x = 180.*rand(1,1000); %1000 points from 0 to 180 degrees.
binWidth = 20; %I want the binWidth to be 20 degrees.
The main function:
% -------------------------------------------------------------------------
% Compute the closest bin center x1 that is less than or equal to x
% -------------------------------------------------------------------------
function [x1, b1] = computeLowerHistBin(x, binWidth)
% Bin index
bin = floor(x./binWidth - 0.5);
% Bin center x1
x1 = binWidth * (bin + 0.5);
% add 2 to get to 1-based indexing
b1 = bin + 2;
end
Finally, the final 'quantized' data:
w = 1 - (x - x1)./binWidth
Here is what I do not get: I do not understand - at all - just why exactly x1
is computed the way it is, and also why/how w
is computed the way it is. In fact, of all the things, w
confuses me the most. I literally cannot understand the logic here, or what is really intended. Would appreciate a detailed elucidation of this logic. Thanks.
回答1:
He is binning with lb <= x < up
and splitting the interval [0,180]
in [-10,10), [10, 30), [30,40) ..., [150,170), [170,190)
.
Suppose x = 180
, then:
bin = floor(180/20-0.5) = floor(9-0.5) = floor(8.5) = 8;
while if x = 0
:
bin = floor(`0/20-0.5) = floor(-0.5) = floor(-1) = -1;
which respectively translate into x1 = 20 * (8+0.5) = 170
and x1 = -10
which seems like what the function suggests lowerHistBin()
.
In the end, w
simply measures how far the point x
is from the corresponding lower bin x1
. Notice that w
is in (0,1], with w
being 1 when x = x1
and approaching 0 when x -> x1+binWidth
. So, if x say approaches 170, then w
will approach 1 - (170-150)/20 = 0
.
来源:https://stackoverflow.com/questions/26348885/not-sure-what-this-histogram-code-is-doing-in-matlab