NumPy运算报ValueError: operands could not be broadcast with shapes (2,6)(6,2)求助
报错原因
- 你代码中使用的
*在NumPy中是逐元素乘法运算符,要求两个参与运算的数组形状完全一致才能正常广播计算。你当前的转置结果t_1形状为(2,6),原差值数组t_2形状为(6,2),不符合逐元素乘法的形状要求,因此触发该报错。 - 你预期的矩阵乘法不能通过
*实现,需要改用NumPy专门的矩阵运算接口。
修正方案
矩阵乘法可以任选以下三种写法中的一种替换原代码的prod计算行即可:
- 使用
@运算符(Python3.5及以上版本支持,可读性最高)
prod = t_1 @ t_2
- 使用
np.dot通用矩阵乘法函数
prod = np.dot(t_1, t_2)
- 使用数组内置的
dot方法
prod = t_1.dot(t_2)
修正后完整可运行代码如下:
import numpy as np X = np.array([[-1, -1], [-2, -1.9], [-3, -2], [1.2, 1.5], [2.3, -1], [4.2, 7]]) s = np.eye(len(X), 2) t_1 = (s - X).T t_2 = (s - X) prod = t_1 @ t_2
计算得到的prod为形状(2,2)的矩阵,符合矩阵乘法的维度运算规则。
内容的提问来源于stack exchange,提问作者user4556432
相关产品推荐
相关产品推荐

