我正在尝试提高 MATLAB 代码的效率。它的作用是,用同一行中其余非零元素的乘法替换矩阵的非零元素。例如,
X = [2 3 6 0; 0 3 4 2]
转变为
X = [18 12 6 0; 0 8 6 12]
在 for 循环中实现这是一项简单的任务。它检查每一行,找到非零值并进行替换。不过我想摆脱 for 循环。有没有办法在没有循环的情况下实现这个?
最佳答案
代码
X = [2 3 6 0; 0 3 4 2];
X1 = X;
X1(~X) = 1;
out = bsxfun(@rdivide,prod(X1,2),X1).*(X~=0)
输出
out =
18 12 6 0
0 8 6 12
关于performance - 替换二维矩阵的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436036/