Loop through hundreds of matrices to change values larger than 1 to 0
    조회 수: 2 (최근 30일)
  
       이전 댓글 표시
    
I have more than 400 matrices, currently I am using "find" to change the values larger than 1 in the matrix to 0 one by one manually with this code:
val = find(yf > 1);
yf(val) = 0;
Is there a way to do it with loop? Please help, thank you.
댓글 수: 3
  James Tursa
      
      
 2017년 10월 19일
				"... 400 matrices ..."
How are these matrices stored? In individual variables? As part of a cell or struct array? Or ...?
채택된 답변
  Image Analyst
      
      
 2017년 10월 19일
        If you want a loop and your images are in the cell array, you can do it like this:
for k = 1 : length(images)
  % Extract his one image.
  thisImage = images{1, k};
  % Reduce/Clip values 1.000001 and larger to 1.
  thisImage(thisImage > 1) = 1;
  % Stick back into cell array
  images{1, k} = thisImage;
end
댓글 수: 3
  Image Analyst
      
      
 2017년 10월 21일
				You're welcome, but you probably never should have stored all your images in a cell array in the first place. It takes up a lot of memory and there was probably never a need to have them all in memory simultaneously. You probably could have read your images one at a time and processed them immediately in the loop without storing them all. Anyway, thanks for Accepting the answer.
추가 답변 (2개)
  Star Strider
      
      
 2017년 10월 19일
        Instead of find, I would simply use ‘logical indexing’.
Example —
yf = 0.5 + rand(4,5)
yf(yf > 1) = 0
yf =
      0.64115       1.2321       1.0209       1.3162       1.1876
       1.0121       1.2498      0.71908       1.2939       1.4869
       1.2213      0.90732       1.3424      0.96911       1.2699
       1.4288      0.73949       1.1629      0.80952       1.3296
yf =
      0.64115            0            0            0            0
            0            0      0.71908            0            0
            0      0.90732            0      0.96911            0
            0      0.73949            0      0.80952            0
This should be more efficient, although you will still have to loop through every matrix.
댓글 수: 2
  Star Strider
      
      
 2017년 10월 19일
				That depends on how your matrices are stored. If each is in a separate file, read the file and then do the replacement.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!