Hello there, I have a short question, as for some reason a for loop doesn't function.

RT is a matrix and krit_out1 is a vector. There is no error message, but the loop is stuck in the first row of the matrix and I don't find the reason.. Can someone help me?
for i = 1:50
RT(RT(:,i)> krit_out1(i)) = NaN;
end

1 Comment

Loops are not required to solve this. See Jan Simon's answer for a simple and efficient solution.

Sign in to comment.

 Accepted Answer

RT=ones(50,50);krit_out1=zeros(50,1);
for i=1:50
for j=1:50
if(RT(j,i)>krit_out1(j))
RT(j,i)=NaN;
end
end
end
Try this.

2 Comments

krit_out1( i ) instead of j.
The vectorization of such loops is not only nice and processed efficiently, but without indices, there are less chances for typos.
Yes, with the correction this is what I needed (and it works with MATLAB 2015b). Thanx!

Sign in to comment.

More Answers (2)

Or without a loop:
RT(RT > krit_out1(:).') = NaN; % >= R2016b: Auto-Expanding
For older Matlab versions:
index = bsxfun(@gt, RT, krit_out1(:).'); % [EDITED]
RT(index) = NaN;

4 Comments

Thank you, this looks really nice, but I use an older version 2015b and get an error message :-/
"Error using bsxfun Non-singleton dimensions of the two input arrays must match each other."
See [EDITED]. It is easier to write a matching answer, if you provide the sizes of the used arrays.
The size of RT is 51 x 50 and the length of krit_out1 is 50. Does that make a difference for the solution?

Sign in to comment.

Try the following. It looks like you intend to operate on the ith column using the ith element of a vector called krit_out1:
for i = 1:50
RT(RT(:,i)> krit_out1(i) ,i) = NaN;
end

4 Comments

Thank you, this looks like a good solution, unfortunately I get an error message applying this. "Subscript indices must either be real positive integers or logicals."
Ray's code uses only the same indices as the code you have posted. Therefore this piece of code cannot produce the error message, except if you are using a different loop counter, but insert "i".
This method is better than using another loop.
You're right, I applied the code a second time, now it works. I don't know why there was the error message before.

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 23 Oct 2017

Commented:

on 26 Oct 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!