In an assignment, number of elements in A and B must be same
2 views (last 30 days)
Show older comments
Mridul Garg
on 19 Jul 2016
Commented: Star Strider
on 19 Jul 2016
Hello
I am reproducing the Bayesian Change Detection code by Adams and MacKay. The following is a code for a time series data tem of size T.
T = 3600;
lambda = 200;
window_size=100;
hazard_func = @(r) constant_hazard(r, lambda); % a separate function
R = zeros([T+1]);
R(1,1) = 1;
muT = mean(tem(window_size:end));
stdT=std(tem(window_size:end));
alphaT = 1;
mins = zeros([T+1]);
for t=1:T
predprobs = studentpdf(tem(t), muT, stdT, 2 * alphaT); % studentpdf is a separate function
H = hazard_func([1:t]');
R(2:t+1,t+1) = R(1:t,t) .* predprobs .* (1-H);
R(1,t+1) = sum( R(1:t,t) .* predprobs .* H );
R(:,t+1) = R(:,t+1) ./ sum(R(:,t+1));
muT=[muT; mean(tem(1:t))]
stdT=[stdT; std(tem(1:t))];
alphaT = [alphaT; alphaT + 0.5];
mins(t) = find(R(:,t)==min(R(:,t)));
end
I keep getting the error
In an assignment A(:) = B, the number of elements in A and B must be the same.
Error in bayesian_change (line 84)
mins(t) = find(R(:,t)==min(R(:,t)));
I've checked multiple times and the dimensions of both mins and R are the same. I know it is tough to understand the code without prior knowledge, but can anyone help me figure out why I keep getting this error even though the dimensions are the same?
Thanks!
0 Comments
Accepted Answer
Star Strider
on 19 Jul 2016
This line:
mins(t) = find(R(:,t)==min(R(:,t)));
will return all indices equal to ‘min(R(:,t))’. Apparently, there are more than one. If you want to return all of them, the easiest way is to do that is to use a cell array for ‘mins’:
mins{t} = find(R(:,t)==min(R(:,t)));
If you only want the index of the first minimum in the column, you can also just use the min function:
[~,mins(t)] = min(R(:,t));
NOTE — This is UNTESTED CODE but should work.
More Answers (0)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!