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 日

0 投票

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 日

0 投票

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

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

質問済み:

2023 年 1 月 2 日

編集済み:

2023 年 1 月 3 日

Community Treasure Hunt

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

Start Hunting!

Translated by