映射比 for 循环慢

mapping is slower than for loop

有类似的问题 但这并不能解释我的问题

我写了一个代码将两个矩阵相乘我使用了简单的方法

def multiply(A, B):
    if A.column_count == B.row_count:
        transpose_of_B = B.transpose().matrix
        data_structure = []
        for row in A.matrix:
            row_column = []
            for column in transpose_of_B:
                row_column_array = list(zip(row, column))
                total = 0
                for element_product in row_column_array:
                    total += element_product[0]*element_product[1]
                row_column.append(total)
            data_structure.append(row_column)
        return Matrix(data_structure)
    else:
        raise Exception(
            "NOT CONFORMABLE!! column_count does not match the row_count")

和差异。方法

    if A.column_count == B.row_count:
        product_matrix = Matrix([[sum(list(map(lambda x, y:x*y, A.row(r+1), B.column(c+1))))
                                 for c in range(B.column_count)] for r in range(A.row_count)])
    return product_matrix

有人请解释为什么在运行时存在显着差异

您正在比较两种完全不同的方法。在第一个中,您遍历行,在第二个中,您只有索引的 for 循环并通过 A.row().

访问行

这将是一个类似的列表理解:

    transpose_of_B = B.transpose().matrix
    product_matrix = Matrix([[sum(map(lambda x, y: x*y, row, column))
                             for column in transpose_of_B] for row in A.matrix])