【发布时间】:2011-12-20 11:47:30
【问题描述】:
我不太习惯在 Matlab 中使用 accumarray 函数,尽管我已经开始欣赏它的强大功能了!我想知道是否可以在 accumarray 函数的 VAL 字段中输入 2 个列。请看-
sz = 3 ; % num_rows for each ID
mat1 = [1 20 ; 1 40 ; 1 50 ; 2 10 ; 2 100 ; 2 110] ; % Col1 is ID, Col2 is Value
idx = [30 1000 ; 30 1200 ; 30 1500 ; 30 1000 ; 30 1200 ; 30 1500 ] ;
% col1: index ID, col2: value
mat1 是 ID 返回,而 idx 是索引返回。为简单起见,重复 idx 返回以匹配 mat1。 mat1 中的所有 ID 都具有相同的行。甚至 idx 也有相同的行。
[~,~,n] = unique(mat1(:,1), 'rows', 'last') ;
fncovariance = @(x,y) (x.*y)/sz ;
accumarray(n, [x(:,2) y(:,2)], [], fncovariance) % --> FAILS as VAL is not-vector!
您可以看到我正在尝试计算协方差 (cov(x,y,1)) 但不能直接使用 Matlab 的函数,因为 mat1 具有 ID,并且我需要每个 ID w.r.t 索引的协方差。
Ansmat:
1 2444.4
2 7888.9
【问题讨论】:
-
最后一行代码中的
x和y是什么?你的意思是mat1和idx? -
@John 是的。但我只是指matlab的内置函数。对我来说,mat1 有很多 ID,y 有指数(比如纽约证券交易所)回报。所以一个简单的 cov(x,y,1) 是没有用的。谢谢。
标签: matlab matrix vectorization covariance