如何使用for循环乘以矩阵 - Python

时间:2011-09-03 02:12:09

标签: python

我不知道如何开始这样做 它需要是一个for循环来乘以mtrixes

例如

[[1,2],[3,4]] * [[3,4],[5,6]]

[1,2],[3,4]

[3,4] * [5,6]

需要帮助非常感谢 我知道90%的人不想为我编码,所以没关系

它只需要是两个方阵

我很确定该模式是在列表中查看它

a[1][1]*b[1][1]+a[1][2]*b[2][1]       a[1][1]b[1][2]+a[1][2]b[2][2]

a[2][1]b[1][1]+a[2][2]b[2][1]         a[2][1]b[1][2]+a[2][2]b[2][2]

6 个答案:

答案 0 :(得分:2)

如果你看看矩阵乘法是如何工作的:

[ 1 2 ] x [ 5 6 ] = [ 1*5+2*7 1*6+2*8 ]
[ 3 4 ]   [ 7 8 ]   [ 3*5+4*7 3*6+4*8 ]

然后你可以确定一种计算方法,例如:如果要乘以输出矩阵的元素 i j ,则需要将LHS矩阵的行 i 中的所有内容乘以所有内容在RHS矩阵的 j 列中,因此这是一个for循环(因为行 i 中的元素数等于列 j )。

您还需要覆盖 i j 的每个组合,以获取输出矩阵的维度,这是嵌套在for循环中的列的for循环行。

当然,实际代码是您实施的练习。

答案 1 :(得分:2)

分解。在尝试编写一个乘以矩阵的函数之前,先写一个乘以向量的函数。如果你能做到这一点,那么将两个矩阵相乘只需要为结果矩阵的每个元素i,j乘以第i行和第j列。

答案 2 :(得分:1)

>>> A=[[1,2],[3,4]]
>>> B=[[3,4],[5,6]]
>>> n=2
>>> ans=[[0]*n for i in range(n)]
>>> ans
[[0, 0], [0, 0]]
>>> for i in range(n):
...     for j in range(n):
...             ans[i][j]=sum((A[i][v]*B[v][j] for v in range(n)))
... 
>>> ans
[[13, 16], [29, 36]]

我认为你只需要简化矩阵乘法的公式。

我们有A * B = C然后: Cij =答案的第i行和第j列中的值。例如上面我们有C12 = 16和C11 = 13 ..(请注意,这是数组中的第0个位置,所以我们经常从0开始而不是1)

Cij = dot_product(row_i_of_A,column_j_of_B)= sum(row_i_of_A(v)* column_j_of_B(v)for v in range(n))

因为我们想要整个答案(全部是C),我们需要找出所有可能的Cij。这意味着我们需要尝试所有可能的对ij,所以我们在范围(n)中循环i,在范围(n)中循环j,并为每个可能的对执行此操作。

答案 3 :(得分:1)

result = [] # final result
for i in range(len(A)):

    row = [] # the new row in new matrix
    for j in range(len(B)):

        product = 0 # the new element in the new row
        for v in range(len(A[i])):
            product += A[i][v] * B[v][j]
        row.append(product) # append sum of product into the new row

    result.append(row) # append the new row into the final result


print(result)

答案 4 :(得分:1)

from numpy import *
m1 = array([[1, 2, 3],[4, 5, 6] ])
m2 = array([[7, 8],[9, 10],[11, 12]])
r = array([[0, 0],[0, 0]])
s = 0
for i in range(2):
    for j in range(2):
        for k in range(3):
            s = s + m1[i][k]*m2[k][j]

        r[i][j] = s
        s = 0
print(r)

我认为当我们使用numpy模块时,append函数在二维数组中不起作用,所以这就是我解决的方法。

答案 5 :(得分:0)

def matmul(matrix1_,matrix2_):
    result = [] # final result

    for i in range(len(matrix1_)):

        row = [] # the new row in new matrix
        for j in range(len(matrix2_[i])):

            product = 0 # the new element in the new row

            for v in range(len(matrix1_[i])):
                 product += matrix1_[i][v] * matrix2_[v][j]
            row.append(product) # append sum of product into the new row

        result.append(row) # append the new row into the final result
    return result