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

33 ビュー (過去 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 ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by