how to find a number in cell and make it NaN?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
Jan
il 9 Ago 2022
Modificato: Jan
il 9 Ago 2022
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 Commenti
Più risposte (2)
Manas Shivakumar
il 9 Ago 2022
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 Commenti
Image Analyst
il 9 Ago 2022
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
il 9 Ago 2022
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.
Vedere anche
Categorie
Scopri di più su Data Type Conversion in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!