我有一个包含多个字段的结构,一些应该是数字,一些应该是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
有什么想法吗?
答案 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);