Cell array / Concatenate non - NaN results

10 ビュー (過去 30 日間)
Eara Eara
Eara Eara 2019 年 4 月 10 日
コメント済み: Eara Eara 2019 年 4 月 11 日
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 件のコメント
Alex Mcaulley
Alex Mcaulley 2019 年 4 月 10 日
is that an exeption? Are there more different cells? I mean, for example:
'[a;b]'
'[a,b;c,d]'
Eara Eara
Eara Eara 2019 年 4 月 10 日
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

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2019 年 4 月 10 日
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 件のコメント
Eara Eara
Eara Eara 2019 年 4 月 11 日
Many thanks to both of you @Guillaume and @Alex, I eventually managed to do what I wanted !

サインインしてコメントする。

その他の回答 (1 件)

Alex Mcaulley
Alex Mcaulley 2019 年 4 月 10 日
A(cellfun(@isnan,A)) = [];
  2 件のコメント
Eara Eara
Eara Eara 2019 年 4 月 10 日
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 2019 年 4 月 10 日
編集済み: Alex Mcaulley 2019 年 4 月 10 日
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))))=[];

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by