Can I assign a single value to multiple elements of a cell array without a loop

14 ビュー (過去 30 日間)
Leo Simon
Leo Simon 2015 年 2 月 17 日
編集済み: Stephen23 2015 年 2 月 18 日
For example, I have an array that looks like
myArray =
[3] [] [3] []
I'd like to fill out the empty elements of myArray with zeros, but, obviously, the following doesn't work:
myArray{find(cellfun(@isempty,myArray))} = 0
Obviously, I could write a loop, but there has to be a better way!
Thanks for any suggestions!

採用された回答

James Tursa
James Tursa 2015 年 2 月 17 日
編集済み: James Tursa 2015 年 2 月 17 日
You almost had the syntax right:
myArray(find(cellfun(@isempty,myArray))) = {0}
Or you can just use logical indexing and skip the find:
myArray(cellfun(@isempty,myArray)) = {0}
  1 件のコメント
Stephen23
Stephen23 2015 年 2 月 18 日
編集済み: Stephen23 2015 年 2 月 18 日
The find is completely superfluous and just slows the code down, so use the second version (uses logical indexing ). A slightly faster alternative is to use the overloaded isempty option:
myArray(cellfun('isempty',myArray)) = {0}

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

その他の回答 (1 件)

Guillaume
Guillaume 2015 年 2 月 17 日
Your main problem is the confusion between () and {}. Secondly, use logical indexing, rather than find:
myArray(cellfun(@isempty, myArray)) = {0};

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by