how to find a number in cell and make it NaN?
    조회 수: 9 (최근 30일)
  
       이전 댓글 표시
    
I have a cell matrix with size 1165x1 cell. In each cell there is one value i.e. number 31 that needs to be found and made NaN.
For example:
A = {[1,2],[3,4],[5 31], [31,6]};
I would like to make 31 = NaN where ever it is seen. Just like matrix B:
B = {[1,2],[3,4],[5 NaN], [NaN,6]};
Any help is greatly appriciated.
댓글 수: 0
채택된 답변
  Jan
      
      
 2022년 8월 9일
        
      편집: Jan
      
      
 2022년 8월 9일
  
      Start with a simple loop:
A = {[1,2], [3,4], [5 31], [31,6]};
B = A;
for k = 1:numel(B)
    b = B{k};
    m = (b == 31);
    if any(m)
        b(m) = NaN;
        B{k} = b;
    end
end
This can be condensed into a cellfun method:
p = [1, NaN];
B = cellfun(@(a) a .* p((a == 31) + 1), A, 'UniformOutput', 0)
댓글 수: 0
추가 답변 (2개)
  Manas Shivakumar
 2022년 8월 9일
        There are several ways to do this.
1) convert to matrix, replace and convert back to cell array:
tmp = cell2mat(A);
tmp(tmp == 31) == Nan;
A = num2cell(tmp)
2)  use cellfun:
A(cellfun(@(elem) elem == 31, A)) = {Nan}
댓글 수: 3
  Image Analyst
      
      
 2022년 8월 9일
				Correct Nan to Nan or nan.  But still not right.  Just to illustrate:
% Method 1
A = {[1,2],[3,4],[5 31], [31,6]}
tmp = cell2mat(A);
tmp(tmp == 31) == NaN;
A = num2cell(tmp)
% Method 2:
A = {[1,2],[3,4],[5 31], [31,6]};
A(cellfun(@(elem) elem == 31, A)) = {NaN}
@Manas Shivakumar Can you try again?
  dpb
      
      
 2022년 8월 9일
				The num2cell conversion also destroys the original cell sizes by placing every element into its own cell. One would have to write something like
 mat2cell(cell2mat(A),[1],[2 2 2 2])
ans =
  1×4 cell array
    {1×2 double}    {1×2 double}    {1×2 double}    {1×2 double}
>> 
to get the original back.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




