MATLAB で cell2mat の前の空のセルを論理 0 に置き換えます
-
26-09-2019 - |
質問
空のセルの配列と、空のセルがゼロである論理配列に変換したいセルがあります。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));
これは機能しますが、ループを使用します。
解決
cell 配列がわかっている場合は、 のみ 含まれる予定です []
(ゼロを表します)、関数を使用するだけです 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
他のヒント
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));
所属していません StackOverflow