Hi,
I'm reading in some data from a csv file, which for some reason is being read in as strings rather than doubles. Now I need to do some math so need to convert to numbers, but my strings don't all have the same number of characters. Here's an example:
B = {'5085';'10955';'6496';'6497';'2953';'5090'};
The only way I have found to convert this is to use a loop:
for count = 1:size(B,1)
B{count} = str2num(B{count});
end
B = cell2mat(B);
But there must be a more efficient, quicker, method for achieving this conversion. Any suggestions please?

 採用された回答

Star Strider
Star Strider 2016 年 8 月 19 日

1 投票

The cellfun function works without the loop:
B = {'5085';'10955';'6496';'6497';'2953';'5090'};
Bn = cellfun(@str2num, B)
Bn =
5085
10955
6496
6497
2953
5090

3 件のコメント

jlt199
jlt199 2016 年 8 月 19 日
Aha, I knew there was something but couldn't think what to look for. Thanks
Star Strider
Star Strider 2016 年 8 月 19 日
My pleasure.
The str2num and other functions don’t work with cell arrays, but cellfun can make most functions compatible with them.
Azzi Abdelmalek
Azzi Abdelmalek 2016 年 8 月 19 日
The cellfun is not more efficient then the for loop

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

その他の回答 (1 件)

Azzi Abdelmalek
Azzi Abdelmalek 2016 年 8 月 19 日

1 投票

str2double(B)

1 件のコメント

jlt199
jlt199 2016 年 8 月 19 日
Thank you, that works too :D

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

カテゴリ

ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by