python中矩阵的元素操作

Ted*_*sby 7 python matrix

假设我有一个像这样的矩阵:

matrix1 = [[11,12,13,14,15,16,17],[21,22,23,24,25,26,27],[31,32,33,34,35,36,37],
            [41,42,43,44,45,46,47],[51,52,53,54,55,56,57],[61,62,63,64,65,66,67],
            [71,72,73,74,75,76,77]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数,它将接收两个矩阵并进行逐点乘法.(不使用numpy)

我已经看到使用拉链的一些东西,但这似乎并不适合我.我认为这是因为我的列表是列表而不是单个列表.

我的代码:

def pointwise_product(a_matrix, a_second_matrix):
    # return m[i][j] = a_matrix[i][j] x a_second_matrix[i][j]
    return [i*j for i,j in zip(a_matrix,a_second_matrix)]
Run Code Online (Sandbox Code Playgroud)

Matrix1可以作为两个参数插入.另一个名为display_matrix的函数将接受此函数并在新行上显示列表的每个元素,但这超出了本问题的范围.

我的猜测是我需要一些列表推导或lambda函数,但我对python来说太新了以至于完全掌握它们.

Sel*_*cuk 6

由于您有2D列表,因此需要嵌套理解.您可以使用以下内容:

[[i * j for i, j in zip(*row)] for row in zip(matrix1, matrix2)]
Run Code Online (Sandbox Code Playgroud)

这将导致您的示例(matrix1 * matrix1)的以下内容:

[[121, 144, 169, 196, 225, 256, 289], 
 [441, 484, 529, 576, 625, 676, 729], 
 [961, 1024, 1089, 1156, 1225, 1296, 1369], 
 [1681, 1764, 1849, 1936, 2025, 2116, 2209], 
 [2601, 2704, 2809, 2916, 3025, 3136, 3249], 
 [3721, 3844, 3969, 4096, 4225, 4356, 4489], 
 [5041, 5184, 5329, 5476, 5625, 5776, 5929]]
Run Code Online (Sandbox Code Playgroud)