2012-10-21 23 views
2

我想讀取一個Excel電子表格,第一列有鍵和以下列中的值,並將鍵值作爲字段名稱和值作爲鍵值輸入到結構中。我想出了下面的代碼,但它只是感覺不到matlab -y - 我覺得應該有一種方法在O(1)時間內完成此操作,而不是O(n)。Matlab XlsRead - 這是風格糟糕的代碼?

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

什麼是更合適的方法去做到這一點?我在家裏工作,在那裏我只有Octave,所以importdata超出瞭解決方案領域。

+2

只需要注意O(n)時間:僅僅因爲可以在不使用for或while的情況下編寫Matlab中的某些過程並不意味着這些過程具有O(1)的潛在複雜性。 –

回答

0

在這種情況下,您可以使用「struct」命令構造各種字段名稱和值。最難的部分通常是以正確的順序獲取單元格輸入......幸運的是,xlsread給你(幾乎)你需要的東西。我假設現在你的Excel文件看起來像:

 
field1 field2 field3 
1 2 3 

如果是這樣的話,那麼:

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

會工作。這是單元陣列擴展的神奇之處。看看「結構」的幫助和「細胞」的幫助。這是好事,太:

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

正如最後一點,布賴恩·L是正確的上面;一個MATLAB單線程可能看起來很酷,但不能「保證」比對應的for-loop更快。

考慮到閱讀代碼的人無法理解上述示例的99%時間,您的for-loop示例就沒有問題。

相關問題