2

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

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?

4

1 回答 1

0

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

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]])
于 2013-03-06T19:09:14.403 回答