首页 > 解决方案 > Clojure 矩阵乘法错误:“向量大小不匹配”(clojure.core.matrix)

问题描述

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

这是 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] 矩阵......我实现计算的方式是否存在错误或者这是一个错误?

标签: clojurematrix-multiplication

解决方案


(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]]是一个矩阵。


推荐阅读