如何在 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 优于 map
和 filter
,则这里有一个使用列表推导的快速而肮脏的解决方案):
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]]
我正在尝试使用函数式编程编写以下函数。
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 优于 map
和 filter
,则这里有一个使用列表推导的快速而肮脏的解决方案):
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]]