首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案矩阵-运算累加

方案矩阵-运算累加
EN

Stack Overflow用户
提问于 2021-02-06 20:08:18
回答 1查看 41关注 0票数 0

我正在尝试解决方案中关于矩阵运算的一些练习。因此我有一个累加的过程:

代码语言:javascript
复制
(define (accumulate operation startvalue sequence)
  (if (null? sequence)
      startvalue
      (operation (car sequence)
          (accumulate operation startvalue (cdr sequence)))))

例如:

代码语言:javascript
复制
(define (dot-product u v)
   (accumulate + 0 (map * u v)))

其中向量(或矩阵)被定义为列表(或列表的列表),例如

代码语言:javascript
复制
(define v (list 1 2)) ;or
(define m (list (list 3 4) (list 5 6)))

现在必须实现矩阵-向量-乘积。我应该得到这样的东西:

代码语言:javascript
复制
  (define (matrix-vector-product m v)
    (map + <?? v ??>  m) 

有没有人给我个提示?

同级

更新:我找到了一个计算矩阵向量乘积的解决方案。它并不真正遵循模式(map <??> m),但至少它使用了已经存在的过程。

代码语言:javascript
复制
(define (matrix-vector-product v m)
  (if (not (pair? m)) '()
      (cons (dot-product v (car m)) (matrix-vector-product v (cdr m)))))
EN

回答 1

Stack Overflow用户

发布于 2021-02-12 16:32:37

我已经找到了一个解决方案,但是我真的不明白它到底是如何工作的:

代码语言:javascript
复制
(define (matrix-vector-product m v)
  (map (lambda (row) (dot-product v row)) m))

正如我所看到的,这个过程,由lambda-expression描述,获取更高的过程m的第一个参数作为参数。显然不是作为整个序列,而是一个接一个地包含对(行)。

为什么会这样呢?

Map需要一个过程和至少一个列表作为参数。

这里的过程是lambda-expression,它计算m和v行之间的点积,列表是m。

但是m和v行之间的点积已经提供了解决方案,我看不到任何到列表m的映射。

也许有人能解决我的困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66076737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档