18

空のセルの配列と、空のセルがゼロである論理配列に変換したいものがあります。cell2matを使用すると、空のセルは無視され、それらが保持していた以前のインデックスを参照せずに、1のみの行列になります。ループを使用せずにこの操作を実行する方法はありますか?

コード例:

for n=1:5              %generate sample cell array
    mycellarray{n}=1;
end
mycellarray{2}=[]      %remove one value for testing

私が試したこと:

mylogicalarray=logical(cell2mat(mycellarray));

その結果、[1,0,1,1,1]ではなく[1,1,1,1]になります。

for n=1:length(mycellarray)
    if isempty(mycellarray{n})
       mycellarray{n}=0;
    end
end
mylogicalarray=logical(cell2mat(mycellarray));

これは機能しますが、ループを使用します。

4

2 に答える 2

30

セル配列に1と(ゼロを表す)のみが含まれることがわかっている場合は、関数を使用して空のセルの論理インデックスを取得し、インデックスベクトルを無効にすることができます。[]cellfun

mylogicalarray = ~cellfun(@isempty, mycellarray);
% Or the faster option (see comments)...
mylogicalarray = ~cellfun('isempty', mycellarray);

セルに(だけでなく)ゼロ値が含まれている可能性がある場合は、最初に関数を使用して空のセルのインデックスを見つけること[]により、空のセルを0に置き換えることができます。cellfun

emptyIndex = cellfun('isempty', mycellarray);     % Find indices of empty cells
mycellarray(emptyIndex) = {0};                    % Fill empty cells with 0
mylogicalarray = logical(cell2mat(mycellarray));  % Convert the cell array
于 2010-04-12T17:34:24.267 に答える
8
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));
于 2010-04-12T17:34:56.480 に答える