Cell array / Concatenate non - NaN results

10 Ansichten (letzte 30 Tage)
Eara Eara
Eara Eara am 10 Apr. 2019
Kommentiert: Eara Eara am 11 Apr. 2019
Dear all,
I have a cell array that looks like this :
A = {
[NaN]
[NaN]
'a'
'[b c]'
[NaN]
'b' }
what I would like to obtain is this array without NaNs, and all "non-Nan" values concatenated, i.e.
B = {
'a'
'b'
'c'
'b'}
I would like to avoid doing different "for" loops, I mean doing it in the shortest way possible :)
I'm unsure on how to obtain this..
Thanks in advance !
  4 Kommentare
Alex Mcaulley
Alex Mcaulley am 10 Apr. 2019
is that an exeption? Are there more different cells? I mean, for example:
'[a;b]'
'[a,b;c,d]'
Eara Eara
Eara Eara am 10 Apr. 2019
No, non-NaN values can only look like this :
'a'
or that :
'[b c]'
or maybe
'[b c d]'
But the "regex" will always have one of these forms

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 10 Apr. 2019
You mention a regex. You'd be better off fixing the regex that produces that output. But if that's not an option:
A = {
[NaN]
[NaN]
'a'
'[b c]'
[NaN]
'b' }
regexp([a{:}], '[a-z]', 'match')
The concatenation of the cells + conversion to char gets rid of the NaNs anyway, so it's just a matter of extracting the characters.
  1 Kommentar
Eara Eara
Eara Eara am 11 Apr. 2019
Many thanks to both of you @Guillaume and @Alex, I eventually managed to do what I wanted !

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Alex Mcaulley
Alex Mcaulley am 10 Apr. 2019
A(cellfun(@isnan,A)) = [];
  2 Kommentare
Eara Eara
Eara Eara am 10 Apr. 2019
I tried this but it gives me an error
Error using cellfun
Non-scalar in Uniform output, at index 4, output 1.
Set 'UniformOutput' to false.
so I tried this
A(cellfun(@isnan,A, 'UniformOutput',0)) = [];
But it also gives me an error which is
Function 'subsindex' is not defined for values of class 'cell'.
Plus I'm not sure it does what I want with non-Nans values..
Alex Mcaulley
Alex Mcaulley am 10 Apr. 2019
Bearbeitet: Alex Mcaulley am 10 Apr. 2019
Try this instead: (this code is to remove the nan values, for non nan values we need more information as Guillaume said)
A(logical(cellfun(@sum,cellfun(@isnan,A,'UniformOutput',false))))=[];

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by