提问人:Astrid 提问时间:7/24/2015 最后编辑:Astrid 更新时间:7/24/2015 访问量:249
使用 incanter 从 clojure 中的数组中获取均值和协方差矩阵
Getting the mean and covariance matrix from array in clojure using incanter
问:
我正在尝试从使用 .1000x2
incanter
我的测试用例是这样的
(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 的新手。
谢谢
答:
2赞
Symfrog
7/24/2015
#1
对于矩阵协方差,您需要使用以下命令:
(in-stats/covariance (in-core/matrix test-mat))
对于矩阵均值向量:
(mapv in-stats/mean (in-core/trans test-mat))
评论
0赞
Astrid
7/24/2015
嗯...... 返回(in-stats/covariance (in-core/matrix test-mat))
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Number
0赞
Symfrog
7/24/2015
@Astrid 矩阵中很可能有一个布尔值。此示例矩阵将导致相同的异常:(def test-mat [[1 2] [2 true]])
0赞
Astrid
7/24/2015
多么奇怪,我只是简单地做:然后这给了(def test-mat [[1 2] [2 2]])
(in-stats/covariance (in-core/matrix test-mat))
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Number
评论
mean
期望一个数字序列;你正在向它传递一系列序列。