让我们说我给了一些索引 B = [10 23 32....];
现在让我说我有一个矩阵A.我想做的是从B的每个索引让我说,我想将A的第i行和第i列设置为0,除了对角元素A(i,i)(它保持不变).
我可以通过循环来做到这一点.但我想要一些基于某种矩阵乘法的方法,它比循环更快.
有什么想法吗?
认为,
B=[10 23 32 12 15 18 20]
M=true(6)
M(B)=false %making the indexed elements false
M=or(M,diag(true(size(M,1),1))) %keep the diagonal elements one
% creating a matrix which has zero in ith row and ith column and diagonal has ones
M1=and(bsxfun(@or,bsxfun(@and,repmat(min(M,[],2),1,size(M,2)),min(M,[],1)),diag(true(size(M,1),1))),M)
%Now just multiply M1 with your matrix A, and you are done.
newA=A.*M1
Run Code Online (Sandbox Code Playgroud)
您可以将以上两行合并为一行,但为了便于阅读,我更喜欢将它们分开。