0

我有以下矩阵:

MatrixA =
     1    10    50
    23    45    76
    71    81    91
     1     2     3
     4     5     6
    78    89    91
     2     3     4

我想var为每列中的多个范围运行该函数。更具体地说,我想计算var每列的第 1 行到第 3 行、第 2 行到第 4 行、第 3 到第 5 行等。我想要的输出是:

1281.33  1260.33   430.33
1281.33  1564.33  2216.33
1566.33  2004.33  2496.33
    ...      ...      ...

我在想语法应该是这样的:

var(MatrixA([1 2 3]:[3 4 5],:))

但这(显然)不起作用。

我可以使用循环来做到这一点,但我想知道是否有不涉及循环的解决方案?

4

2 回答 2

1

您可以使用函数摆脱一个循环hankel来创建范围:

V = [];
for C = MatrixA,
    V = [V, var(hankel(C(1:3),C(3:end))).'];
end

例如 ifC包含MatrixAthen的第一列

>> hankel(C(1:3),C(3:end))
ans =
     1    23    71     1     4
    23    71     1     4    78
    71     1     4    78     2

>> var(hankel(C(1:3),C(3:end)))
ans =
       1281.3       1281.3       1566.3       1902.3         1876
于 2013-08-01T22:03:34.273 回答
1

You could be a little creative with bsxfun and reshape to compute an index array and then compute the variances:

n = 3;
idx = bsxfun(@plus, 1:size(MatrixA, 1) - n + 1, (0:n - 1)');
B = reshape(var(reshape(MatrixA(idx, :), 3, [])), [], size(MatrixA, 2));
于 2013-08-01T22:32:43.553 回答