我想执行一个非常简单的计算 - 我有矩阵A,每行有一个值。
我想循环遍历矩阵,从数组中的最后一个值中减去前一个值,然后通过矩阵向后工作。结果应作为矩阵B ea中的一行添加。
这不应该花费很长时间,但循环会持续几分钟,我想因为我没有正确地预先分配矩阵B并且每个循环的大小都在增长。我不确定如何正确地做到这一点。
我的代码:
matrixB = [];
for alfa=25471: -1: 2,
row = matrixA(alfa)-matrixA(alfa-1)
matrixB = [row;matrixB]
end
答案 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