为简单起见,我们定义函数只进行矩阵乘法:
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?
答案 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]])