フィルターのクリア

Converting cell in double

7 ビュー (過去 30 日間)
Max1234
Max1234 2023 年 1 月 2 日
編集済み: Stephen23 2023 年 1 月 3 日
Hey Guys,
i have a 8942x1 cell and want to convert it into a 8942x1 double ? The final product should be look likes this:
[] 0
1 1
[] => 0
[] 0
[] 0
... ...
Thank you very much for your help!
Attached my file:

採用された回答

Star Strider
Star Strider 2023 年 1 月 2 日
編集済み: Star Strider 2023 年 1 月 2 日
Try something like this —
LD = load(websave('ids','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1249257/ids.mat'));
ids = LD.ids
ids = 8942×1 cell array
{0×0 double} {[ 1]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
idsd = cell2mat(ids)
idsd = 966×1
1 1 1 1 1 1 1 1 1 1
idsmt = cellfun(@isempty,ids, 'Unif',0); % Detect Empty Cells
ids(cell2mat(idsmt)) = {0}; % Fill Missing Values With '0'
idsd = cell2mat(ids)
idsd = 8942×1
0 1 0 0 0 0 0 0 0 0
EDIT — Corrected typographical errors.
.
  2 件のコメント
Max1234
Max1234 2023 年 1 月 2 日
Perfect!! Thank you!
Star Strider
Star Strider 2023 年 1 月 2 日
As always, my pleasure!

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

その他の回答 (1 件)

Stephen23
Stephen23 2023 年 1 月 2 日
編集済み: Stephen23 2023 年 1 月 3 日
Simpler and more efficient:
S = load('ids.mat');
ids = S.ids
ids = 8942×1 cell array
{0×0 double} {[ 1]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
Method one: robust indexing:
X = cellfun(@isscalar,ids);
V = zeros(size(ids));
V(X) = [ids{X}]
V = 8942×1
0 1 0 0 0 0 0 0 0 0
Method two: VERTCAT():
ids(~cellfun(@isscalar,ids)) = {0};
V = vertcat(ids{:})
V = 8942×1
0 1 0 0 0 0 0 0 0 0

カテゴリ

Help Center および File ExchangeData Types についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by