假設我們有存儲在打包表單中的矩陣A (m*n)
(大小爲m*n
的一維數組 - 帶有前導維 - 列)。我需要縮小矩陣A(S)
- 這是從A
刪除1列或更多列的結果。我可以很容易地在循環中手工處理,但還有另外一種方法 - 使用選擇矩陣I(S)
,它們是除去1個或多個列的恆等矩陣(全0或對角線1)。然後,例如,如果我需要從A
中刪除第三排,我需要形成I(3)
- 身份沒有第三欄,然後是A(3)=A*I(S)
。由於我需要A
的許多變體,我需要刪除不同列的所有不同的身份矩陣I(S)
。以快速方式從矩陣中刪除列C++
我在想這種方式,因爲我使用了英特爾數學核心庫 - 這對於矩陣乘法非常有效。
所以,問題是你怎麼想形成新的矩陣A(S)
的最快方法:用手,用A
直接工作或先形成I(S)
- 而問題是如何迅速形成這些矩陣 - 再乘以A*I(S)
或你可以提出任何其他快速解決方案
爲了說明假設我們有基質A
:
1 2 3
4 5 6
7 8 9
它存儲在陣列A=[1,4,7,2,5,8,3,6,9]. Suppose I need to form
A(2)`即去除第二列。我需要輸出:
1 3
4 6
7 9
這是存儲在C + + A_S=[1,4,7,3,6,9]
。 這可以直接在矩陣A上完成,這將花費O(n^2)
時間並且對於大矩陣不是有效的。或者,我們可以形成I(2)
:
1 0
0 1
0 0
保存在C++作爲I_S = [1,0,0,0,1,0]
。然後A(2) = A*I(2)
你真的需要一個特定的數據類型矩陣的結果(或其他需要修改的矩陣)?因爲否則我看來,像最有效的方式做到這一點,可以寫'matrix_view'類,它的作用就像一個正常的矩陣,但在修改爲了省去列訪問索引,因爲這將釋放你真正執行復制。 – Grizzly 2013-04-23 17:35:29