我正在尝试在Matlab中使用GPU进行并行计算,我想将一个函数应用于一个大型数组(以避免使用for循环,这非常慢)。我已经阅读了Matlab的文档,我可以使用arrayfun,但前提是我想进行元素操作。也许我很困惑,但如果有人能帮助我使用它,我将不胜感激。作为我想做的一个例子,想象一下我想执行以下操作,
$ X_t = B Z_t + Q \ varepsilon_t $
其中$ X_t $是2x1,$ B $是2x5,$ Z_t $是5x1,$ Q $ 2x2。我定义了一个函数,
function X = propose(Z,B,Q)
X=Z*B+Q*rand(2,1);
end
现在,假设我有一个数组$ Z_p $,即5x1000。对于给定矩阵$ B $和$ Q $,我希望对1000列中的每一列应用前一个函数来获得一个数组$ X_p $,即2x1000。
鉴于arrayfun
的文档,我不能这样做,
X=arrayfun(@propose,Zp,B,Q)
那么,有没有可能做到这一点?
谢谢!
PS :是的,我知道在这个简单的例子中,我可以在没有for循环的情况下进行乘法,但我想到的应用程序更复杂,我无法做到。我只是把这个例子作为例子。