Jblas,DGEMM中参数8(LDA)的错误

时间:2015-10-15 12:03:41

标签: java matrix blas

我正在计算一个协方差矩阵而没有任何问题:

    DoubleMatrix W = new DoubleMatrix(w);
    DoubleMatrix ret = new DoubleMatrix(coReturns);
    DoubleMatrix meanRets = ret.columnMeans();
    DoubleMatrix demeanedReturns = ret.subRowVector(meanRets);
    DoubleMatrix S = demeanedReturns.transpose().mmul(demeanedReturns).div(varianceDataPoints - 1);

但突然间我抛出了这个异常:

Exception in thread "main" java.lang.IllegalArgumentException: XERBLA: Error on argument 8 (LDA) in DGEMM
    at org.jblas.NativeBlas.dgemm(Native Method)
    at org.jblas.SimpleBlas.gemm(SimpleBlas.java:247)
    at org.jblas.DoubleMatrix.mmuli(DoubleMatrix.java:1781)
    at org.jblas.DoubleMatrix.mmul(DoubleMatrix.java:3138)

我真的不知道这个例外试图告诉我什么。谷歌也不知道。有人能解释一下我在这里发生了什么以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以找到LDA here的目的:

 LDA is INTEGER
           On entry, LDA specifies the first dimension of A as declared
           in the calling (sub) program. When  TRANSA = 'N' or 'n' then
           LDA must be at least  max( 1, m ), otherwise  LDA must be at
           least  max( 1, k ).

有一个相关的SO post解释了它的含义。

jblas的源代码是here,所以你应该能够逐步完成它并弄清楚发生了什么。 看起来奇怪的是,在线上你得到异常(SimpleNative:247),LDA被设置为0(而不是1和k之间的值)。我建议在jblas issue tracker上打开一个问题。