在matlab中并行处理矩阵的索引

时间:2015-04-07 01:08:24

标签: matlab matrix indexing parallel-processing

假设我有一个m-by-by-p矩阵“A”,每个索引存储一个实数,现在我想创建另一个矩阵“B”和B(i,j,k)= f( A(i,j,k),i,j,k,otherVars),是否有更快的方法在matlab中进行,而不是循环遍历所有元素? (注意函数需要索引号(i,j,k))

示例如下(实际函数f可能更复杂):

A = rand(3, 4, 5);
B = zeros(size(A));
C = 10;
for x = 1:size(A, 1)
    for y = 1:size(A, 2)
       for z = 1:size(A, 3)
           B(x, y, z) = A(x,y,z) + x - y * z + C;
       end
    end
end

我尝试过创建一个单元格“B”和

B{i, j, k} = [A(i, j, k), i, j, k];

然后我应用了cellfun()进行并行计算,但它比A中每个元素的for循环更慢。

在我的实际实现中,函数f比B = A + X - Y复杂得多。* Z + C;它需要四个缩放器值,我不想修改它,因为它是一个写在外部包中的函数。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

通过构建ndgrid适当的值来对其进行矢量化:

[X,Y,Z] = ndgrid(1:size(A,1), 1:size(A,2), 1:size(A,3));
B = A + X - Y.*Z + C;