簡體   English   中英

Matlab:有效地分配稀疏矩陣中的值

[英]Matlab:Efficient assignment of values in a sparse matrix

我正在Matlab中工作,我遇到了下一個問題:我有一個nx2元素的B矩陣,其中包含用於分配大型稀疏矩陣A (將近500,000x80,000)的索引。 對於B每一行,第一列是A的列索引,必須包含1,而第二列是A的列索引,必須包含-1。 例如:

B=  1   3
    2   5
    1   5
    4   1
    5   2

對於此B矩陣,對應的A矩陣必須如下所示:

A= 1    0   -1    0    0
   0    1    0    0   -1
   1    0    0    0   -1
  -1    0    0    1    0
   0   -1    0    0    1

因此,對於行iB ,相應的行iA必須滿零除外A(i,B(i,1))=1A(i,B(i,2))=-1

通過在B的所有行上使用for循環,這非常容易,但是它非常慢。 我還嘗試了下一個公式:

A(:,B(:,1))=1
A(:,B(:,2))=-1

但是matlab給我一個“內存不足錯誤”。 如果有人知道實現此目標的更有效方法,請告訴我。

提前致謝!

我認為您應該能夠使用sub2ind函數執行此操作。 此函數將矩陣下標轉換為線性索引。 您應該可以這樣做:

pind = sub2ind(size(A),1:n,B(:,1)); % positive indices
nind = sub2ind(size(A),1:n,B(:,2)); % negative indices
A(pind) = 1;
A(nind) = -1;

編輯:我(錯誤地,我認為)假定稀疏矩陣A已經存在。 如果不存在,則此方法不是最佳選擇。

您可以使用sparse函數:

m = size(B,1); %// number of rows of A. Or choose larger if needed
n = max(B(:)); %// number of columns of A. Or choose larger if needed
s = size(B,1);
A = sparse(1:s, B(:,1), 1, m, n) + sparse(1:s, B(:,2), -1, m, n); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM