【问题标题】:Allocating matrix of certain size分配一定大小的矩阵
【发布时间】:2014-11-26 09:22:53
【问题描述】:

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

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

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

我的代码:

matrixB = [];

for alfa=25471: -1: 2,

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

    matrixB  = [row;matrixB]

end

【问题讨论】:

  • 简单的diff(matrixA) 应该这样做。
  • 谢谢!我应该知道的。
  • 要预分配matrixB,首先获取matrixA' by n=length(matrixA)`的大小并分配matrixB = zeros(n-1,1);。然后通过matrixB(alfa-1) = row; 写信给它。正如 Divakar 提到的,使用diff 当然是更好更快的解决方案。

标签: matlab loops memory-management


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多