如何将多个矩阵的函数应用于python numpy的矩阵列表的每个元素?

时间:2013-03-06 17:55:25

标签: python matrix numpy iteration

为简单起见,我们定义函数只进行矩阵乘法:

f(matrix1, matrix2):
    #assume that matrix1.shape == np.transpose(matrix2).shape
    #both are 1 dimensional so this returns a scalar
    return matrix1 * matrix2 

现在让我说我想多次运行这个功能来得到一笔钱: - matrix1 - 每次不同 - matrix2 - 每次都相同

我可以写一个for循环:

matrix_a1 = np.matrix([1,2])
matrix_a2 = np.matrix([3,4])
matrix_list = [matrix_a1, matix_a2]
matrixb = np.matrix([5,6],[7,8])
total = 0
for matrix in matrix_list
    total+= f(matrix, matrixb)

我想这样写:

sum(f(matrix_list, matrixb))

但这不起作用,因为它试图在matrix_list和matrixb之间进行矩阵乘法,而不是迭代在matrix_list上。

如何使用numpy迭代matrix_list?

1 个答案:

答案 0 :(得分:1)

将矩阵列表转换为多维数组。

如果你走出matrix对象的舒适度并使用普通数组,那将会更容易。当给定两个数组时,您的第一个函数可以用np.dot重写为:

def f(array1, array2) :
    return np.dot(array1, array2)

您现在可以:

>>> array_a1 = np.array([1, 2])
>>> array_a2 = np.array([3, 4])
>>> array_a = np.array([array_a1, array_a2])
>>> array_a
array([[1, 2],
       [3, 4]])
>>> array_b = np.array([[5, 6], [7, 8]])
>>> array_b
array([[5, 6],
       [7, 8]])
>>> f(array_a, array_b)
array([[19, 22],
       [43, 50]])
>>> np.sum(f(array_a, array_b), axis=0)
array([62, 72])

你甚至可以这样做:

>>> array_a1 = np.array([[1, 2], [3, 4]])
>>> array_a2 = np.array([[5, 6], [7, 8]])
>>> array_a = np.array([array_a1, array_a2])
>>> array_b = np.array([[9, 10], [11, 12]])
>>> np.sum(f(array_a, array_b), axis=0)
array([[142, 156],
       [222, 244]])