通过应用给定的操作将矩阵转换为向量的函数

时间:2017-02-12 18:40:45

标签: dictionary scheme lisp racket

我正在尝试编写一个函数,它接受一个操作和一个矩阵将矩阵转换为一个向量。例如,如果我调用(matrix-to-vector + ((1 2 3 4) (5 6 7 8))),它将返回来自(6 8 10 12)的{​​{1}}。矩阵输入是NxM矩阵,操作是两个参数运算符(如+ - * /或字符串) -附加)。它使用运算符将​​矩阵中每列的元素组合在一起,从而返回一个大小为M的向量。我有一个感觉图在这里会有所帮助,但我不知道如何实现它。我将操作映射到矩阵列中的每个元素以获得结果向量。

2 个答案:

答案 0 :(得分:0)

map可以解决问题。唯一要考虑的是你应该使用apply,因为输入是一个列表列表:

(define (matrix-to-vector op lst)
  (apply map op lst))

例如:

(matrix-to-vector + '((1 2 3 4) (5 6 7 8)))
=> '(6 8 10 12)

答案 1 :(得分:0)

如果分离构成矩阵的列表,也可以以更简单的方式使用'map'

(map + '(1 2 3 4) '(5 6 7 8))

输出:

'(6 8 10 12)

对于N * M矩阵,它也可以使用2个以上的列表:

(map + '(1 2 3 4) '(5 6 7 8) '(10 20 30 40))

输出:

'(16 28 40 52)