how to find a number in cell and make it NaN?

6 visualizzazioni (ultimi 30 giorni)
MP
MP il 9 Ago 2022
Risposto: MP il 10 Ago 2022
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.

Risposta accettata

Jan
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)
B = 1×4 cell array
{[1 2]} {[3 4]} {[5 NaN]} {[NaN 6]}

Più risposte (2)

Manas Shivakumar
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
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]}
A = 1×4 cell array
{[1 2]} {[3 4]} {[5 31]} {[31 6]}
tmp = cell2mat(A);
tmp(tmp == 31) == NaN;
A = num2cell(tmp)
A = 1×8 cell array
{[1]} {[2]} {[3]} {[4]} {[5]} {[31]} {[31]} {[6]}
% Method 2:
A = {[1,2],[3,4],[5 31], [31,6]};
A(cellfun(@(elem) elem == 31, A)) = {NaN}
Error using cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
@Manas Shivakumar Can you try again?
dpb
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.

Accedi per commentare.


MP
MP il 10 Ago 2022
Thank you so much to everyone for their valuable time and efforts.
It saved a lot time of mine!

Categorie

Scopri di più su Characters and Strings 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!

Translated by