Je ne suis pas très à l'aise avec l'utilisation de la fonction accumarray dans Matlab, même si j'ai commencé à apprécier ses puissances! Je me demandais si je pouvais entrer 2 cols dans le champ VAL de la fonction accumarray. S'il vous plaît voir -2 colonnes dans VAL field d'accumarray - Matlab
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 est l'ID retourne tandis que idx est l'indice renvoie. Pour plus de simplicité, les retours d'idx sont répétés pour correspondre à mat1. Tous les ID de mat1 ont les mêmes lignes. Même idx a les mêmes lignes.
[~,~,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!
Vous pouvez voir que je suis en train de calculer covariance (cov (x, y, 1)) mais ne peut pas utiliser la fonction de Matlab directement mat1 a ID et j'ai besoin covariance pour chaque ID w.r.t Index.
Ansmat:
1 2444.4
2 7888.9
Quels sont 'x' et' y' dans votre dernière ligne de code? Voulez-vous dire «mat1» et «idx»? –
@John oui. Mais je faisais juste référence à la fonction intégrée de matlab. Pour moi, mat1 a beaucoup d'identifiants et y a des indices (disons NYSE). Donc un simple cov (x, y, 1) serait inutile. Merci. – Maddy