2015-06-24 77 views
1

默認情況下,Matlab使用double作爲數值類型。我正在訓練GMM並耗盡內存,所以我想將默認數字類型更改爲浮點,將內存的一半作爲雙精度浮點運算。可能嗎?將默認數值類型更改爲在matlab中浮點型

我知道single(A)將雙精度元素A轉換爲單精度,但是我們需要爲第一個分配雙精度存儲器,其中第一個耗盡內存。另外,我不能在我所有的矩陣分配中使用single(),因爲許多工具箱中的各種函數被調用,我無法手動更改。

那麼有沒有一種方法可以調用zeros(n)默認分配一個浮點矩陣而不是double?

回答

3

不,目前沒有辦法將默認數值類型更改爲float/single。看到這些信息的帖子在論壇The MathWorks公司:

而且,我引用的第一個鏈接引用約翰D'ERRICO - 一個強大的和傳說中的MATLAB專家:

這在MATLAB中是不可能的。無論如何,在single工作幾乎不是一個好主意。無論如何,它在許多情況下實際上是較慢的。與精確度損失的風險相比,節省的內存幾乎不值得。如果你絕對必須,只在最大的陣列上使用single

因此,如果您使用瞭如此多的內存,您應該考慮重新構造您的算法。如果您正在求解非常大且具有許多零係數的線性系統,請考慮使用sparse來減少您的內存需求。


而且它,這樣做是危險的,因爲有可能是依賴於一個事實,即矩陣double類型的分配假設,並自發地改變這些以single可能會產生意想不到的後果其他工具箱功能。

2

正如@rayryeng所說,MATLAB沒有辦法將「默認數值類型」更改爲single。我甚至不完全確定這意味着什麼。

但是,你問一個具體問題還有:

那麼,有沒有一種方式,呼籲zeros(n)會默認而不是雙浮點數分配的矩陣?

是的 - 你可以使用zeros(n, 'single')。這會給你一個single類型的零的數組。 zeros(n)只是zeros(n, 'double')的簡寫,您還可以要求輸入任何其他數字類型,例如uint8int64。其他陣列創建功能如ones,rand,randn,NaN,infeye支持相似的語法。

需要注意的是業務的開展上single類型的數組可能不總是返回single類型的輸出(所以你可能需要隨後將它們轉換爲single),他們可以使用中間陣列不在single型的(所以你並不總能獲得你可能希望的所有記憶力優勢)。例如,圖像處理工具箱中的許多功能將接受類型爲single的輸入,但會在內部轉換爲double以執行操作。統計工具箱中適合GM模型的功能似乎接受single類型的輸入,但我不知道它們在內部執行了什麼操作。

相關問題