0

次のマトリックスがあります。

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

var各列の複数の範囲に対して関数を実行したいと思います。より具体的には、列ごとに1行から3行、2行から4行、3行から5行などを計算したいと思いvarます。私が望む出力は次のようになります。

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範囲を作成する関数を使用して、1 つのループを取り除くことができます。

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

たとえば、 thenCの最初の列が含まれている場合MatrixA

>> 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 に答える