这似乎是一个愚蠢的问题,但是我在寻找一段时间后还是无法弄清楚,所以我在这里问一下。
在core.matrix中,如何将一个3x2矩阵乘以一个2x3矩阵?我一定误解了非常基础的东西。天真地说,我希望这能够工作,并且我认为core.matrix会为我完成基础数学运算。
(* (matrix [[1 0 -2]
[0 3 -1]])
(matrix [[0 3]
[-2 -1]
[0 4]]))
我通过谷歌搜索第一个结果http://www.purplemath.com/modules/mtrxmult.htm找到了这个例子,期望的结果是:
[[ 0 -5]
[-6 -7]]
相反,我收到了:
RuntimeException Incompatible shapes, cannot broadcast [3 2] to [2 3]
clojure.core.matrix.impl.persistent-vector/eval5013/fn--5014
(persistent_vector.clj:152)
提前感谢。
p.s. 我的命名空间看起来就像core.matrix的示例。
(ns xyz
(:refer-clojure :exclude [* - + == /]) ; get from core.matrix
(:use clojure.core.matrix)
(:use clojure.core.matrix.operators)
(:gen-class))
*
的矩阵定义放入您的命名空间的步骤,而只是使用emul
和mmul
。这样,在代码中就不会忘记*
的含义,也不会疑惑相乘的变量是数字还是矩阵了。如果我不定义希望能够应用于矩阵和数字的函数,则使用重载的算术运算符看起来很酷,但可能会使读者(例如我)感到困惑,并导致错误。这是个人喜好的问题。 - Mars