一个人如何在core.matrix中乘以矩阵和向量元素?
我试图找到一个核心。
A = [1 2 3 4; 5 6 7 8]
B = [2; 3]
A .* B
ans =
2 4 6 8
15 18 21 24
我的猜测是以下代码应该等效:
(let [A [[1 2 3 4]
[5 6 7 8]]
B [[2]
[3]]]
(* A B))
但会产生以下错误:
RuntimeException: Incompatible shapes, cannot broadcast [2 1] to [2 4]
这里的复杂性是, core.matrix
比八度的广播更严格。
尤其是,core.matrix
中的广播只会创建新的前导维度,通常不会将长度1的维度扩展到任意长度的维度。
编辑:这样做的原因是,core.matrix
实际上是必须支持多个基础数组实现的API,因此选择默认广播是可以在大多数合理的基础数组类型上有效实现的东西。
要解决您的特定问题,您可能会考虑:
- 确保两个矩阵完全匹配形状
- 写一个明确的广播功能,以模仿八度行为
cannot broadcast [2 1] to [2 4]
意味着它不能将2*1矩阵施加到2*4矩阵。
在您的代码(* A B)
中,*
运算符表示:对于矩阵中的每个元素,找到与另一个矩阵处于同一位置的元素并进行乘法,然后将结果保存在新矩阵中。*
操作员并不是要进行矩阵乘法。