2012-10-23 67 views
9

如何將Eigen::Matrix<double,Dynamic,Dynamic>轉換爲Eigen::SparseMatrix<double>? 我正在尋找一種更好的方式,而不是通過密集矩陣進行迭代Eigen轉換稠密矩陣來稀疏一個

+0

讓我明白這一點。您想要將密集矩陣轉換爲稀疏矩陣而不檢查,哪些條目是零並且應該刪除,以及要保留哪些條目?你如何看待這可能工作?你肯定應該在這個問題上工作 - 這是非常不清楚的。 – angainor

+1

無需手動檢查元素。我正在尋找一種方法或函數或庫來做到這一點。但從我讀到的這裏我認爲這是不可能的 – tyranitar

回答

14

可以使用sparseView()方法爲:

sparse = dense.sparseView();

,甚至指定一個公差:

sparse = dense.sparseView(epsilon,reference);

1

您是否控制了密集矩陣的創建?

如果你不這樣做,沒有辦法讀取每個矩陣元素來查看它是否爲空。

如果您自己創建密集矩陣,則可以創建數據結構以在需要時將其轉換爲稀疏矩陣。例如,您可以在每行矩陣中存儲該行中非空元素的數量。然後,您可以跳過包含0個非null元素的行,並且一旦您看到count數量告訴您的非null元素,就可以停止任何行的轉換。

您存儲的額外數據將取決於您期望的稀疏矩陣的類型。常見的稀疏矩陣模式是在稀疏矩陣中浮動的稠密子矩陣。當您創建密集矩陣時,您可以不計算這些密集區域。例如。不要在每行存儲元素數量,而是在某些x,y偏移處保留非空矩形區域的列表。