Octave 八度稀疏矩阵广播复/除

Octave 八度稀疏矩阵广播复/除,octave,sparse-matrix,elementwise-operations,Octave,Sparse Matrix,Elementwise Operations,在倍频程中,可以在完整矩阵和兼容(可广播)向量(即MxN.*1xN或MxN.*Mx1)之间进行元素相乘。但这似乎不适用于稀疏矩阵 考虑下面的例子 v = (1:5)'; s = spdiags(v,0,5,5); % simple sparse matrix s .* v; % <--- error 'nonconformant arguments (op1 is 5x5, op2 is 5x1)' full(s) .* v; % <--- works but

在倍频程中,可以在完整矩阵和兼容(可广播)向量(即MxN.*1xN或MxN.*Mx1)之间进行元素相乘。但这似乎不适用于稀疏矩阵

考虑下面的例子

v = (1:5)';
s = spdiags(v,0,5,5);   %  simple sparse matrix

s .* v;        % <--- error 'nonconformant arguments (op1 is 5x5, op2 is 5x1)'
full(s) .* v;  % <--- works but defeats sparse matrix
但对于其他情况,即非对角稀疏矩阵,它会因操作数顺序而变得不必要的复杂


使用稀疏矩阵进行可广播操作有什么诀窍吗。。。否则这是一个错误还是一个功能(即必要的)?

广播根本不适用于稀疏矩阵。请看我没有基准测试过的八度音阶,但可能这里比较明智的方法是执行矩阵乘法并使用它再次创建稀疏矩阵,例如
spdiags(s*v,0,5,5)
。。。(但我知道你只是在做一个简单的测试用例)
s * diag(v);  % <--- returns desired result
diag(v) * s;  % <--- also results desired result