2014-04-08 126 views
3

通常我會根據數據類型使用cell(),zeros()ones()進行預分配,但預先分配表的最佳方式是什麼,因爲它可以容納各種數據結構?在Matlab中預分配表格的最佳方法是什麼?

我說的是在Matlab 2013b添加table()功能。

很顯然,我可以用這樣的代碼保留內存:

T = table(cell(x,y)) 

但是當我的表應該舉辦各種數據類型我遇到的問題。想象一下,現在我想填寫一列整數,或者像我的情況一樣,填充每行包含一個字符串,一個整數和一個浮點數的觀察值。牛逼

回答

2

Matlab的怎麼會知道,有多少內存來分配,當你不想告訴它的數據存儲在表中?除了「不這樣做」之外,我不認爲你的問題有很好的答案。如果您知道每列中存儲了什麼,create the variables並隨時添加行。

或創建預分配矩陣/單元中的數據,並在年底創建的表格中。

+0

嗯好點。在我的情況下,我知道每列將會是什麼類型的數據,例如列「name」將始終包含字符串。然後,我在循環的每次迭代中向表中添加各種行(數量取決於數據)。 所以,如果我正確理解你,我應該使用預先分配的數據創建變量。例如名稱的長單元格()列,並將其包含在表格中。 但是我不知道最後會有多少行。過高估計是否是一個好主意,並最終刪除空行? – florian

+0

我無法給你一個很好的建議。它取決於你高估了多少。我的意思是,如果你預分配單元格,他們不會爲你的字符串分配空間,因爲Matlab應該知道它們有多長時間?相比於分配字符串,我想重塑單元格不會花費太多時間。除非你有可能有10萬個參賽作品。儘管如果性能是一個問題,重新分配10k單元可能會更好,然後分配300k並僅使用100k。 – Mathias

+0

剛剛在這裏測試過:'a = cell(10000000,1)';可能足夠快,也不會佔用太多的內存。所以高估可能不會成爲一個問題,除非你超越了這個範圍 – Mathias

相關問題