2016-07-20 105 views

回答

2

如果接受,你可以簡單地使用他們的指標像

sp_mat(i, i) 

由於每個訪問包括二進制搜索,其性能可能無法滿足。在這種情況下,您仍然可以通過一些限制獲得更好的性能。

  1. 您不會更改矩陣的基礎佈局,例如,添加/刪除nnzs,壓縮;
  2. 您將重複訪問對角線。

有了這些限制,您可以存儲對角線組件的指針,以便您可以稍後在O(1)時間訪問數據。你可以得到的指針與

&sp_mat(i, i) 
+0

對,那些正是我的條件。知道如何訪問這些職位的指針? – cgreen

+0

@cgreen use'&' – kangshiyin

2

要完成kangshiyin的回答,您還可以編輯通過密集的矢量表達式對角線,例如到1添加到每個對角線元素:

sp_mat.diagonal().array() += 1; 

警告:這隻有在對角元素已經存在的情況下才有效,原始問題就是這種情況。

+0

對我來說,元素已經存在。你會期望表達式比存儲指針和直接改變更快/更慢嗎? – cgreen

+0

nope這種方法每次都會涉及二進制搜索,但在某些情況下寫起來更容易。 – ggael

+0

是否.diagonal()在v3.2.9中可用? – kangshiyin