clojure - 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] 矩阵......我实现计算的方式是否存在错误或者这是一个错误?
解决方案
(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]]
是一个矩阵。
推荐阅读
- java - Java:访问字符串数组时的 ArrayIndexOutOfBounds
- typescript - VSCode 无法安装 TSLint 扩展
- apache-spark - 火花在 249 端口运行
- excel - 每行最频繁的观察,有两个排名决胜局
- c# - 限制函数被调用的频率,同时返回一个缓存值
- php - 我想使用开关值插入值。
- php - xml,获取日历数据(davical 日历)
- prestashop - prestashop 产品名称、描述和价格
- node.js - Twilio 可编程聊天获取最后一条消息
- bash - SED 命令在命令行中有效,但在脚本中无效 [找不到文件错误]