numpy中float类型矩阵执行矩阵乘法时报TypeError错误求助
报错原因与解决方案
根因定位
该报错与矩阵内的float类型数值无关,触发原因是你对Python原生序列(列表/元组)直接执行了乘法运算,没有先将其转换为numpy数组:
Python原生列表的*运算符仅支持和整数类型数值运算,作用是重复列表内容,不支持和float类型、或者其他列表做矩阵乘法操作,因此触发该类型错误。
排查修复步骤
- 首先验证运算对象的类型,执行
print(type(待运算变量名)),如果输出为<class 'list'>或<class 'tuple'>即可确认是该问题 - 运算前将两个待运算对象转换为numpy数组,调用
np.array(原生序列)即可完成转换 - 若要执行矩阵乘法运算,不要使用
*运算符,使用@运算符或np.matmul()方法即可:numpy中*为逐元素乘法,要求两个数组维度完全一致,@/np.matmul()才是标准矩阵乘法,要求前一数组的列数等于后一数组的行数
参考实现代码
import numpy as np # 模拟原生列表格式的特征矩阵、参数矩阵 feature_list = [[1.2, 3.5], [2.4, 4.7], [3.1, 5.2]] theta_list = [0.4, 0.2] # 错误写法:直接对列表做乘法,触发报错 # result = feature_list * theta_list # 正确写法:转numpy数组后做矩阵乘法 feature_arr = np.array(feature_list) theta_arr = np.array(theta_list) result = feature_arr @ theta_arr print(result)
内容的提问来源于stack exchange,提问作者Qianghao Ken Wu
相关产品推荐
相关产品推荐

