4

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

例如:

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

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

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

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

有任何想法吗?

4

3 回答 3

3

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

str2double({foo.data})
于 2013-10-30T22:42:30.387 回答
2

这是一个相当紧凑deal的解决方案,它将数值返回到 each中foo.data

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

测试时记得清除和重新定义foo

编辑:修复vertcat了多个数字的问题。谢谢,尼斯皮奥。

于 2013-10-30T23:19:59.017 回答
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);
于 2013-10-30T23:06:48.007 回答