2015-07-24 2 views
0

J'essaie d'obtenir la matrice de matrice et de covariance à partir d'une structure de données 1000x2 en utilisant incanter.Obtention de la matrice de moyenne et de covariance à partir de array dans clojure en utilisant incanter

Mon cas de test semble que cette

(ns test.mean-cov 
    (:require clojure.string 
      [incanter.core :as in-core] 
      [incanter.stats :as in-stats]) 
    (:use clojure.java.io)) 

(def test-mat [[1 2] [2 2]]) 

(in-stats/mean test-mat) 

que je courais en pouvant être éclairés.

L'erreur que je reçois est la suivante:

java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to java.lang.Number 
     Numbers.java:1104 clojure.lang.Numbers.double_array 
      stats.clj:1492 incanter.stats/mean 

Je ne peux pas dire tout à fait que je comprends, et malheureusement mon recherche sur Google ne contribue pas. Quelqu'un pourrait-il offrir une explication simple et une solution?

Naturellement une façon terrible de le faire serait

(def c1 (first (transpose test-mat))) 
(def c2 (second (transpose test-mat))) 

(def data-cov-mat [[(in-stats/covariance c1 c1) (in-stats/covariance c1 c2)] [(in-stats/covariance c2 c1) (in-stats/covariance c2 c2)]]) 

divulgation complète: Je suis nouveau à clojure.

Merci

+0

'mean' attend une séquence de nombres; vous lui passez une séquence de séquences. – Mars

Répondre

2

Pour covariance matrice vous devez utiliser les éléments suivants:

(in-stats/covariance (in-core/matrix test-mat)) 

et pour la matrice vecteur moyen:

(mapv in-stats/mean (in-core/trans test-mat)) 
+0

Hmmm ... '(in-stats/covariance (in-core/matrice-test-mat))' renvoie 'java.lang.ClassCastException: java.lang.Boolean ne peut pas être converti en java.lang.Number' – Astrid

+0

@Astrid Vous avez probablement une valeur booléenne dans votre matrice. Cet exemple de matrice entraînerait la même exception: '(def test-mat [[1 2] [2 true]])' – Symfrog

+0

Comme c'est très étrange, je fais simplement: '(def test-mat [[1 2] [2 2]]) ', puis' (in-stats/covariance (in-core/matrice-test-mat)) 'qui donne' java.lang.ClassCastException: java.lang.Boolean ne peut pas être converti en java.lang.Number' – Astrid