2

我正在尝试读取 Excel 电子表格,其中第一列具有键,以下列具有值到结构中,键作为字段名称,值作为值。我想出了以下代码,但感觉不是很matlab-y - 我觉得应该有一种方法可以在 O(1) 时间内完成此操作,而不是 O(n)。

[num,txt,~]=xlsread('whatever.xls','Rate');
txt=cell2mat(txt);
for i = 1:size(txt)
    rates.(txt(i,:))=num(i,:)
end

有什么更合适的方法来解决这个问题?我在家里工作,我只有 Octave,所以 importdata 超出了解决方案的范围。

4

1 回答 1

0

在这种情况下,您可以使用“struct”命令创建具有各种字段名称和值的结构。最困难的部分通常是以正确的顺序获取单元格输入......幸运的是,xlsread (几乎)为您提供所需的东西。我现在假设您的 excel 文件如下所示:

字段 1 字段 2 字段 3
1 2 3

如果是这样的话,那么:

[~,~,raw] = xlsread('C:\...\xlsx');
myStruct = struct(raw{:}); 

将工作。这就是单元阵列扩展的魔力。查看“struct”的帮助和“cell”的帮助。这也很好:

http://blogs.mathworks.com/loren/2009/10/21/dealing-with-cells/

最后一点,Brian L 在上面是正确的;MATLAB one-liner 可能看起来很酷,但不能“保证”比相应的 for 循环更快。

鉴于阅读您的代码的人在 99% 的情况下都无法理解上面的示例,因此您的 for 循环示例就可以了。

于 2012-10-23T01:12:38.777 回答