Clojure矩阵乘法错误:“向量大小不匹配”(clojure.core.matrix)

时间:2019-06-28 12:21:33

标签: clojure matrix-multiplication

我有一个要乘以的大小为[1,10]的矩阵,另一个为[1,50]的矩阵(它们都是向量-一个将被转置)。我可以在MATLAB中执行此操作,但是我正在使用的Clojure library返回错误,指示矢量形状不匹配。

这是Clojure代码(失败)

(def A [-0.4300 0.8205 0.3060 0.7011 0.3717 0.3790 0.6332 0.6179 0.5414 0.7277])
(m/shape A)
(def B [1 4.5239 1.0 4.54133 4.17334 1.0 2.3195 1.25481 2.57760 0.999 1.71030 1.167121 0.996 1.0 1.0 1.0 1.0 2.42060 4.53421 1.0 3.81672 2.26177 1.412147 1.13449 4.22844 1.87670 1.42931 4.13310 1.0 3.06024 1.0 0.999 1.02989 8.92018 8.90729 6.60117 2.61610 7.31420 1.0 4.23987 0.999 1.05592 5.31238 1.0 1.0 0.999 7.97549 1.6177 1.0 1.0])
(m/shape B)
(m/mmul (m/transpose A) B)

在MATLAB中的等效操作:

A = [-0.4300 0.8205 0.3060 0.7011 0.3717 0.3790 0.6332 0.6179 0.5414 0.7277];
size(A)
B = [1 4.5239 1.0 4.54133 4.17334 1.0 2.3195 1.25481 2.57760 0.999 1.71030 1.167121 0.996 1.0 1.0 1.0 1.0 2.42060 4.53421 1.0 3.81672 2.26177 1.412147 1.13449 4.22844 1.87670 1.42931 4.13310 1.0 3.06024 1.0 0.999 1.02989 8.92018 8.90729 6.60117 2.61610 7.31420 1.0 4.23987 0.999 1.05592 5.31238 1.0 1.0 0.999 7.97549 1.6177 1.0 1.0];
size(B)
C = A' * B;
size(C)

显然,该操作在数学上是可能的-它应该返回[10,50]矩阵...我实现计算的方式是否有错误,或者这是一个错误?

2 个答案:

答案 0 :(得分:3)

(let [A [[-0.4300 0.8205 0.3060 0.7011 0.3717 0.3790 0.6332 0.6179 0.5414 0.7277]]
      B [[1 4.5239 1.0 4.54133 4.17334 1.0 2.3195 1.25481 2.57760 0.999 1.71030 1.167121 0.996 1.0 1.0 1.0 1.0 2.42060 4.53421 1.0 3.81672 2.26177 1.412147 1.13449 4.22844 1.87670 1.42931 4.13310 1.0 3.06024 1.0 0.999 1.02989 8.92018 8.90729 6.60117 2.61610 7.31420 1.0 4.23987 0.999 1.05592 5.31238 1.0 1.0 0.999 7.97549 1.6177 1.0 1.0]]]
    (mmul (transpose A) B))

[2 3 5]不是矩阵,而是向量。

[[2 3 5]]是一个矩阵。

答案 1 :(得分:2)

根据mmul文档,根据参数位置,转置在向量中是隐式的:

  

对矩阵或向量执行矩阵乘法。相当于   应用于向量的内积。将一维向量大致视为   作为第一个参数或作为Nx1矩阵时的1xN矩阵(行向量)   (列向量)是第二个参数时,除了维数   结果将不同于矩阵参数。

所以,你不应该换位。