You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python报错:无法将序列与numpy.float64类型非整数相乘,求预测值

解决线性回归代码中的TypeError问题

问题原因

代码执行时触发 TypeError: can't multiply sequence by non-int of type 'numpy.float64',核心原因是Python原生列表无法与numpy浮点数类型直接进行逐元素乘法。在计算预测值 yp=a*X+b 时,X 是普通列表,a 是numpy计算出的float64类型,两者运算逻辑不兼容。

修正方案

将列表 X 转换为numpy数组,使其支持向量运算,有两种实现方式:

方式1:定义时直接使用numpy数组

修改初始的X、Y定义,直接用numpy数组替代原生列表:

import numpy as np
import matplotlib.pyplot as plt

X = np.array([5, 15, 25, 35, 45, 55])
Y = np.array([5, 20, 14, 32, 22, 38])
plt.scatter(X, Y)

xm = np.mean(X)
ym = np.mean(Y)
num = 0
den = 0
for i in range(len(X)):
    num += (X[i] - xm) * (Y[i] - ym)
    den += (X[i] - xm) ** 2
a = num / den
b = ym - a * xm
print(a, b)

yp = a * X + b  # numpy数组支持与标量的逐元素运算
plt.scatter(X, Y)
plt.plot(X, yp, 'r')
plt.show()  # 显式调用show()确保图像正常显示

方式2:计算预测值前转换为numpy数组

保留原列表定义,仅在计算预测值时临时转换:

import numpy as np
import matplotlib.pyplot as plt

X = [5, 15, 25, 35, 45, 55]
Y = [5, 20, 14, 32, 22, 38]
plt.scatter(X, Y)

xm = np.mean(X)
ym = np.mean(Y)
num = 0
den = 0
for i in range(len(X)):
    num += (X[i] - xm) * (Y[i] - ym)
    den += (X[i] - xm) ** 2
a = num / den
b = ym - a * xm
print(a, b)

X_arr = np.array(X)
yp = a * X_arr + b  # 用转换后的numpy数组执行运算
plt.scatter(X, Y)
plt.plot(X_arr, yp, 'r')
plt.show()

补充说明

  • 转换为numpy数组后,a * X 会自动触发广播运算,即对数组中的每个元素单独乘以a,再加上b,最终得到对应长度的预测值数组。
  • 代码末尾的plt.show()是必要的,否则matplotlib生成的图像可能无法在窗口中显示。

内容的提问来源于stack exchange,提问作者pumpkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:45:34