有效地提取矩阵的列

时间:2014-07-03 12:31:45

标签: matlab

我目前有一段代码,我试图优化,而且瓶颈似乎是从一个相当大的矩阵中提取给定的列。

特别是,我的代码花了50%的时间来做Wi = W(:,minColIdx)。我也尝试过线性索引,但没有变化。

我想知道是否有人知道为什么会这样,如果有人有任何提示可以帮助我优化我的代码的这一部分。

谢谢!

编辑:这是我的代码:http://pastebin.com/TnTy6a8D 它现在的效果非常差,我只是在我的新GPU上玩gpuArray。我尝试从W中提取列的第44和53行是代码瓶颈的地方。

2 个答案:

答案 0 :(得分:1)

可以提高操作速度吗?

当然

优化索引代码是否值得?

可能不是


Matlab在基本矩阵运算方面非常擅长(如果在C ++中运行速度提高10%,我会感到非常惊讶)。你可以忘记寻找一种更好的索引矩阵的方法,如果你真的想要一个明显的性能提升,那么改进你的硬件可能是你最好的选择。

话虽这么说,当然总是值得考虑你是否真的需要做你正在尝试的繁重计算,或者你是否能想到更聪明的算法。

答案 1 :(得分:0)

我会从表面上看待你关于从矩阵中提取列的瓶颈的陈述,因为你没有为我提供足够的细节来推测,否则我觉得这有点令人惊讶。

如果您有权访问matlab编译器,我建议您尝试编译瓶颈功能。尝试:

help mcc

在该帮助中,您将看到典型的用途是:

为myfun.m制作一个独立的C可执行文件:

mcc -m myfun

你也可以尝试编写一个c函数来获取你的列并用mex编译: http://www.mathworks.com/help/matlab/ref/mex.html