在matlab中设置稀疏矩阵的最快方法
The fastest way to set up sparse matrix in matlab
我正在使用迭代方法,因此使用大型稀疏矩阵。
例如,我想设置一个这样的矩阵:
1 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0
0 1 1 1 0 0 1 0 0 0
0 0 1 1 1 0 0 1 0 0
1 0 0 1 1 1 0 0 1 0
0 1 0 0 1 1 1 0 0 1
所以只有某些对角线是非零的。在我的编程中,我将使用更大的矩阵大小,但想法是一样的:只有少数对角线是非零的,所有其他条目都是零。
我知道,如何在 for 循环中执行,但如果矩阵大小很大,它似乎无效。我也使用对称矩阵。
如果您能为我的示例矩阵提供代码以及说明,我将不胜感激。
你想要spdiags
:
m = 6; %// number of rows
n = 10; %// number of columns
diags = [-4 -1 0 1 4]; %// diagonals to be filled
A = spdiags(ones(min(m,n), numel(diags)), diags, m, n);
这给出:
>> full(A)
ans =
1 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0
0 1 1 1 0 0 1 0 0 0
0 0 1 1 1 0 0 1 0 0
1 0 0 1 1 1 0 0 1 0
0 1 0 0 1 1 1 0 0 1
我正在使用迭代方法,因此使用大型稀疏矩阵。 例如,我想设置一个这样的矩阵:
1 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0
0 1 1 1 0 0 1 0 0 0
0 0 1 1 1 0 0 1 0 0
1 0 0 1 1 1 0 0 1 0
0 1 0 0 1 1 1 0 0 1
所以只有某些对角线是非零的。在我的编程中,我将使用更大的矩阵大小,但想法是一样的:只有少数对角线是非零的,所有其他条目都是零。
我知道,如何在 for 循环中执行,但如果矩阵大小很大,它似乎无效。我也使用对称矩阵。 如果您能为我的示例矩阵提供代码以及说明,我将不胜感激。
你想要spdiags
:
m = 6; %// number of rows
n = 10; %// number of columns
diags = [-4 -1 0 1 4]; %// diagonals to be filled
A = spdiags(ones(min(m,n), numel(diags)), diags, m, n);
这给出:
>> full(A)
ans =
1 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0
0 1 1 1 0 0 1 0 0 0
0 0 1 1 1 0 0 1 0 0
1 0 0 1 1 1 0 0 1 0
0 1 0 0 1 1 1 0 0 1