将struct字段从字符串转换为数字

时间:2013-10-30 22:38:33

标签: matlab

我有一个包含多个字段的结构,一些应该是数字,一些应该是char。但是,在我使用regexp之后,我在要用作数字的字段中有字符。

例如:

foo.str = 'one';
foo.data = '1';
foo(2).str = 'two';
foo(2).data = '2';

在我的梦中我能做到:foo.data = str2double(foo.data),但这不起作用。

我可以遍历结构,但这只是一个好的选择。 它是一个长结构(100,000),包含大约20个文件。

for i = 1:length(foo)
    foo(i).data = str2double(foo(i).data);
end

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

收集子字段中的所有元素并调用str2double一次:

str2double({foo.data})

答案 1 :(得分:2)

这是一个相当紧凑的解决方案,deal的数值会回到每个foo.data

fdnc = num2cell(str2double({foo.data}));
[foo.data] = deal(fdnc{:});

请务必在测试时清除并重新定义foo

编辑:修复了多个数字的vertcat问题。谢谢,nispio。

答案 2 :(得分:1)

有点麻烦,但这很有效;没有循环:

N = length(foo);
[aux_str{1:N}] = deal(foo.str);
[aux_data{1:N}] = deal(foo.data);
aux_data = mat2cell(str2double(aux_data),1,ones(1,N));
foo = cell2struct([aux_str; aux_data],{'str','data'},1);