Skip to main content
 首页 » 编程设计

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

2025年05月04日9think

为了简单起见,让我们定义只做矩阵乘法的函数:

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?

请您参考如下方法:

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

如果您跳出舒适的 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]])