我正在使用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 这里还有另一个相关问题,但我还没有理解它背后的理论,看看我是否也可以将这些解决方案应用于这个问题。
我正在考虑编写一个mex
c++ 函数或尝试进行某种嵌套arrayfun
,以便将每个logical
/bsxfun
操作作为更大函数的子例程调用,以避免 for 循环瓶颈。