Java 使用白炽灯从clojure中的阵列中获取均值和协方差矩阵
我试图使用Java 使用白炽灯从clojure中的阵列中获取均值和协方差矩阵,java,clojure,incanter,Java,Clojure,Incanter,我试图使用incanter从1000x2的数据结构中获取数组平均值和协方差矩阵 我的测试用例看起来是这样的 (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/m
incanter
从1000x2
的数据结构中获取数组平均值和协方差矩阵
我的测试用例看起来是这样的
(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)
我在LighTable中跑步
我得到的错误是:
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
我不能说我理解这一点,不幸的是,我的谷歌搜索没有帮助。有人能提供一个简单的解释和解决方案吗
当然,一种可怕的做法是
(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)]])
完全披露:我是clojure的新手
感谢对于矩阵协方差,您需要使用以下各项:
(in-stats/covariance (in-core/matrix test-mat))
对于矩阵平均向量:
(mapv in-stats/mean (in-core/trans test-mat))
mean
需要一系列数字;你在传递一系列的序列。嗯(在stats/convariance(在core/matrix test mat中))
返回java.lang.ClassCastException:java.lang.Boolean不能转换为java.lang.Number
@Astrid您的矩阵中很可能有一个布尔值。这个示例矩阵会导致相同的异常:(def test mat[[12][2 true]])
我做的很奇怪:(def test mat[[12][2]])
然后(在stats/convariance(在core/matrix test mat中))
这会给出java.lang.ClassCastException:java.lang.Boolean不能转换为java.lang.Number