使用@做矩阵乘法报错:unsupported operand type(s) for @: 'list' and 'list'
解决Python列表使用@运算符矩阵乘法报错的问题
报错原因
Python原生的list类型并不支持@运算符(矩阵乘法),这个运算符仅适用于具备矩阵运算能力的数据类型,比如NumPy的ndarray对象。
解决方案
使用NumPy库将列表转换为数组后再执行矩阵乘法,步骤如下:
- 导入NumPy库
- 将原生列表转为NumPy数组
- 使用
@运算符完成矩阵乘法
示例代码:
import numpy as np # 定义两个待相乘的列表 a = [[1, 2], [3, 4]] b = [[5, 6], [7, 8]] # 转换为NumPy数组 np_a = np.array(a) np_b = np.array(b) # 执行矩阵乘法 matrix_product = np_a @ np_b print(matrix_product)
替代方案(不使用NumPy)
如果不想依赖NumPy,可以手动实现矩阵乘法逻辑,但代码会更繁琐,示例如下:
def matrix_multiply(a, b): # 检查矩阵维度是否匹配 if len(a[0]) != len(b): raise ValueError("矩阵维度不匹配,无法相乘") # 初始化结果矩阵 result = [[0 for _ in range(len(b[0]))] for _ in range(len(a))] # 计算矩阵乘法 for i in range(len(a)): for j in range(len(b[0])): for k in range(len(b)): result[i][j] += a[i][k] * b[k][j] return result a = [[1, 2], [3, 4]] b = [[5, 6], [7, 8]] print(matrix_multiply(a, b))
内容的提问来源于stack exchange,提问作者Диана Профе
相关产品推荐
相关产品推荐

