2014-01-28 117 views
3

我有一個矩陣https://www.cise.ufl.edu/research/sparse/matrices/Hamm/add20.html 我要考慮它作爲相應的圖形的鄰接矩陣,所以我用1替換每個非零元素:如何將邏輯稀疏矩陣轉換爲MATLAB中的整數稀疏矩陣?

A = A ~- 0 

現在我要計算A * A 但我不能因爲

>> A*A  
Error using * 
Both logical inputs must be scalar. 
To compute elementwise TIMES, use TIMES (.*) instead 

,我由於某種原因,我不能只轉換邏輯矩陣爲整數

>> uint(A) 
Error using numerictype (line 172) 
Invalid arguments (WordLength must be a scalar numeric value). 

Error in fixdt (line 186) 
     embeddedType = numerictype(varargin{:}); 

Error in uint (line 14) 
DataType = fixdt(0,WordLength,0); 

我可以通過將矩陣轉換爲滿秩來做到這一點,但這對我的任務來說是不切實際的。

回答

1

首先,你會想要使用uint8或類似的,而不是uint - 請閱讀幫助文件有什麼區別,uint不會做你認爲它的作用。但是,根據this論壇帖子,唯一有效的稀疏數據類型是doublelogical。你有一個邏輯矩陣,但似乎稀疏矩陣乘法沒有爲邏輯矩陣定義。因此,您必須將A轉換爲雙重形式,然後才能夠像試圖那樣使其倍增。

或者,使用A^2而不是 - 這將與邏輯稀疏矩陣一起使用。不知道爲什麼它不同。

+0

謝謝你的回覆。 A^2的確看起來很奇怪,看看它爲什麼會起作用會很有趣...... – Moonwalker

+1

@Moonwalker:'A^2'的結果是雙倍,所以'mpower'可能會事先轉換'A'當然大於)。不知道爲什麼'mtimes'不會這樣做。 – horchler