给定两个矩阵,打印这些矩阵的乘积

2024-10-03 21:34:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须检查给定的矩阵是否可以相乘,如果可以,则返回乘积。 我不能用numpy来计算乘积。你知道吗

使用的示例:

A = [[1,2],[3,4]]
B = [[1,2,3,4,5],[5,6,7,8,9]]

预期输出:A*B = [[11,14,17,20,23],[23,30,37, 44,51]]

以下是我的代码和输出:

def matrix_mult(A,B):
    countA = 0
    countB = 0
    result = [[0]*len(B[0])]*len(A)
    for i in range(len(A)):
        if A[i][1]:
            countA += 1

    for i in range(len(B)):
        if B:
            countB += 1

    if countA == countB:
        for i in range(len(A)):
            for j in range(len(B[0])):
                for k in range(len(A)):
                    result[i][j] += A[i][k]*B[k][j]

    return result

A = [[1,2],[3,4]]
B = [[1,2,3,4,5], [5,6,7,8,9]]
matrix_mult(A,B)

输出:

[[34, 44, 54, 64, 74], [34, 44, 54, 64, 74]]

代码/逻辑有问题吗?你知道吗


Tags: 代码innumpy示例forlenifrange
3条回答

为什么代码这么长?你可以试试这个-

def dot(A, B):
    return [[sum(x*y for x, y in zip(A_row, B_column)) for B_column in zip(*B)] for A_row in A]

A = [[1,2],[3,4]]
B = [[1,2,3,4,5],[5,6,7,8,9]]
result = dot(A, B)
print(result)

#[[11, 14, 17, 20, 23], [23, 30, 37, 44, 51]]

看看这对你有没有帮助。你知道吗

我建议使用numpy:

import numpy as np

A = np.array([[1,2],[3,4]])
B = np.array([[1,2,3,4,5],[5,6,7,8,9]])

np.matmul(A, B)

# output : array([[11, 14, 17, 20, 23],
#                 [23, 30, 37, 44, 51]])

你的代码有几个问题,下面我试图改进你的代码:

def matrix_mult(A,B):

    num_col_a = len(A[0])
    num_rows_b = len(B)

    result = [[0 for _ in range(len(B[0]))] for _ in range(len(A))]

    if num_col_a == num_rows_b:
        for row_a_index, row_a in enumerate(A):
            for col_index, col_b in enumerate(zip(*B)):
                result[row_a_index][col_index] = sum(a * b for a, b in zip(row_a, col_b))

    return result

A = [[1,2],[3,4]]
B = [[1,2,3,4,5], [5,6,7,8,9]]
print(matrix_mult(A,B))

# output: [[11, 14, 17, 20, 23], [23, 30, 37, 44, 51]]

有罪的是你的result声明。通过复制元素(不创建适当的矩阵)来声明列表不是一个好方法。更多细节in this discussion。你知道吗

尝试:

result = [[0 for _ in range(len(B[0]))] for _ in range(len(A))]

而不是:

result = [[0] * len(B[0]) ] * len(A)

这应该很管用!你知道吗

相关问题 更多 >