2016-05-02 34 views
0

私はimage_nameというフィールドを持つ構造体のMATLAB配列を持っています。私は構造体のMATLAB配列から空の文字列を削除する方法

idx = [x.image_name] == [] 
x(idx) = []; 
の線に沿って何かをしようとして削除したい

x(n).image_name = [] 

数のエントリ(つまり、構造体配列のn番目の行が空だimage_nameを持っている)

があります。

ただし、空の文字列のインデックスを取得することはできません。試したすべてのバリエーションでエラーが発生します。

空の文字列の行インデックスを見つけるには、どうすれば削除できますか?

答えて

5

{}を使用して名前をセル配列に変換し、isemptycellfun)を使用して空のエントリを見つけて削除することができます。

ismt = cellfun(@isempty, {x.image_name}); 
x = x(~ismt); 

または1つのラインで

x = x(~cellfun(@isempty, {x.image_name})); 

更新

コメントで@Rodyで述べたように、'isempty'を使用してではなく、無名関数を作成することは非常に高速です。

x = x(~cellfun('isempty', {x.image_name})); 
+4

+1。完全性のために: 'cellfun'への文字列引数の使用は、匿名関数(' cellfun( 'isempty'、{x.image_name}) ')を使うよりもずっと高速でした。最近のMATLABでもこれが本当であるかどうかはわかりません。 –

+0

@RodyOldenhuisああ、ちょうどそれをテストしたところ、それはまだ真のようです。ありがとう! – Suever

+0

まだ分かりません:)他の可能な文字列引数を必ずチェックしてください。昔ながらの、しかし、かなり大きなセル配列に便利です。 –

関連する問題