我是學習Matlab的新生。 任何人都可以請告訴我是否有更快的方式可能沒有循環: 爲每行分配兩個值1,-1到大稀疏矩陣的不同位置。Matlab - 如果存在一種更快的方法來爲大矩陣賦值?
我的代碼來構建爲條件的MILP問題雙矩陣或bibimatrix:
˚F^ K_ {IJ} < = Y_ {IJ}對於每個弧(i,j)和所有的k〜= R;在多商品流量模型中。
天真的方法:
bimatrix = [];
%創建的每一行,然後添加到雙矩陣
newrow4= zeros(1,n*(n+1)^2);
for k=1:n
for i=0:n
for j=1: n
if j~=i
%change value of some positions to -1 and 1
newrow4(i*n^2+(j-1)*n+k)=1;
newrow4((n+1)*n^2+i*n+j)=-1;
% add to bimatrix
bimatrix=[bimatrix; newrow4];
% change newrow4 back to zeros row.
newrow4(i*n^2+(j-1)*n+k)=0;
newrow4((n+1)*n^2+i*n+j)=0;
end
end
end
end
OR:
%首先產生大的稀疏矩陣。
bibimatrix=zeros(n^3 ,n*(n+1)^2);
t=1;
for k=1:n
for i=0:n
for j=1: n
if j~=i
%Change 2 positions in each row to -1 and 1 in each row.
bibimatrix(t,i*n^2+(j-1)*n+k)=1;
bibimatrix(t,(n+1)*n^2+i*n+j)=-1;
t=t+1
end
end
end
end
在Matlab中使用上述代碼,生成此矩陣的時間(n〜12)大於3s。我需要在更短的時間內生成更大的矩陣。
謝謝。
該索引的邏輯是什麼? – Vuwox
你的兩個循環不會產生相同的輸出。您還會說,它只包含1和-1,但大多數條目都是0.請檢查代碼是否正確並解釋您的矩陣應該是什麼樣子。 – Tim
始終,始終爲您的矩陣預先分配內存! –