我被要求实现矩阵乘法。到目前为止,我的代码是:(define mult (λ (m1 m2) (if (or (empty? m1) (empty? m2)) '() (map vec-mult m1 m2))))
仅生成列表列表。必须将每个内部列表相加以给出沿对角线的值以添加以生成元素。我停留在如何进行2D乘法的部分,以便m1中的每一行乘以m2中的每一行(因此矢量 - 矩阵乘法)。我也实现了“transpose”和“vec-mult”。请给我一个关于如何解决这个问题的提示。教授希望我们使用转置和地图但我不知道如何完成它。
由于
答案 0 :(得分:0)
使用列表的每个元素对绑定变量执行某些操作:
(let ((a 5))
(map (lambda (e) (* a e)) '(1 2 3 4)))
; ==> (5 10 15 20)
以列表作为参数求和(或做任何事情):
(apply + '(1 2 3))
; ==> 6
unzip
一个清单:
(apply map list '((1 2 3) (4 5 6) (7 8 9) (10 11 12)))
; ==> ((1 4 7 10) (2 5 8 11) (3 6 9 12))
展平一个级别:
(apply append '((1 (2)) (3 4)))
; ==> (1 (2) 3 4)
答案 1 :(得分:0)
让我们考虑两个矩阵:
[ a b ] [ x ]
A = [ c d ] v = [ y ]
首先,A和B的矩阵产品是:
[ ax + by ]
Ax = [ cx + dy ]
请注意,转置B给出:
T
v = [ x y ]
现在考虑矩阵A的行与v:
的转置的元素乘法[a b] mult [x y] [ ax by ]
[c d] mult [x y] = [ cx dy ]
请注意,行的总和为:
ax + by
cx + dy
是Ax的元素。
所以要将A乘以v:
广告1:转置:Transpose a matrix in racket (list of lists
广告2.使用(map * row v-transposed)
计算逐点产品。
广告3.使用(apply + products)
计算产品总和。