如何在 python 中的矩阵和向量上使用 reduce/lambda 函数?

How to use reduce/lambda function on matrices and vectors in python?

我正在尝试使用函数式编程编写以下函数。

def mv(A,X,n):
    Y = [0]*n
    for i in range(n):
        for j in range(n):
            Y[i] += A[i][j] * X[j]
    return Y

reduce 函数可以将向量与矩阵相乘吗?因为这就是我在这里要做的。我正在尝试将矩阵 A 与向量 X 相乘,但收到错误消息。错误是:

TypeError: 'function' object is not iterable

def mv(A,X,n):
    return list(map(sum,lambda x, y: x*y(A, X)))

输入:

A = [[1,2],[3,4]]
X = [1,2]
n = 2
print(mv(A,X,n))

输出应该是:

[5,11]

如果您想坚持使用函数式构造(Python 优于 mapfilter,则这里有一个使用列表推导的快速而肮脏的解决方案):

import operator as op
x = [[1],[2],[3]] # Notice the dimensions!
A = [[1,1,1],
     [2,2,2],
     [3,3,3]]

def matrix_mult(A, X):
    return [
        [sum(map(op.mul, row, col)) for col in zip(*X)]
        for row in A
    ]

查看实际效果:

In [17]: A
Out[17]: [[1, 1, 1], [2, 2, 2], [3, 3, 3]]

In [18]: x
Out[18]: [[1], [2], [3]]

In [19]: matrix_mult(A, x)
Out[19]: [[6], [12], [18]]