在core.matrix中矩阵和向量的元素乘法

如何在core.matrix中将矩阵和向量元素相乘?

我试图找到相当于以下八度代码的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,所以选择默认广播是可以在大多数合理的底层数组类型上有效实现的东西.

要解决您的具体问题,您可以考虑:

>确保两个矩阵的形状完全匹配
>编写模仿八度行为的显式广播函数

点赞