我正在使用MATLAB。我有非常大的 稀疏矩阵,我想在这个矩阵的每一列上执行一个logical或。bsxfun有一个循环,其中是填充稀疏矩阵for的单个操作。logical在这里,我包含了一个带有一些虚假小数据的示例函数,以查看我想要做什么;
函数 maskMat()
graph_temp = round(rand(10,10));
抽动;
com_mat = round(rand(10,10));
com = round(rand(10,1));
对于 ii=1:长度(graph_temp)
com_mat(:,ii) = 逻辑(com ~= com(ii));
%bsxfun 也可以,但速度稍慢
%com_mat(:,ii) = bsxfun(@ne,com,com(ii));
结尾
目录;
com_mat = graph_temp .* com_mat;
graph_temp并且com_mat更大,大约有1Mfor行和列,并且代码对循环的执行速度非常慢。关于 SO 这里还有另一个相关问题,但我还没有理解它背后的理论,看看我是否也可以将这些解决方案应用于这个问题。
我正在考虑编写一个mexc++ 函数或尝试进行某种嵌套arrayfun,以便将每个logical/bsxfun操作作为更大函数的子例程调用,以避免 for 循环瓶颈。