分配一定大小的矩阵

时间:2014-11-26 09:22:53

标签: matlab loops memory-management

我想执行一个非常简单的计算 - 我有矩阵A,每行有一个值。

我想循环遍历矩阵,从数组中的最后一个值中减去前一个值,然后通过矩阵向后工作。结果应作为矩阵B ea中的一行添加。

这不应该花费很长时间,但循环会持续几分钟,我想因为我没有正确地预先分配矩阵B并且每个循环的大小都在增长。我不确定如何正确地做到这一点。

我的代码:

matrixB = [];

for alfa=25471: -1: 2,

    row = matrixA(alfa)-matrixA(alfa-1)

    matrixB  = [row;matrixB]

end

1 个答案:

答案 0 :(得分:1)

正如Divakar所评论的那样,你应该使用matrixB = diff(matrixA)。它简单快捷。

对于大小的一般预分配,您可以通过使用zeros命令启动矩阵变量来完成此操作。这是通过以下形式完成的:matrix = zeros(numRows, numCols)。如果你知道它们的大小,那么以这种方式启动矩阵总是更好。动态矩阵可以很方便,但每次访问变量时都会更新大小长度,从而获得性能提升。

详细说明使用示例代码:

numElements = length(matrixA);    
matrixB = zeros(numElements - 1, 1);
for index = numElements:-1:2
  matrixB(index) = matrixA(index) - matrixA(index - 1);    
end