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

使用scipy.stats.gaussian_kde触发TypeError,请求排查解决

解决scipy.stats.gaussian_kde权重参数的类型错误

错误原因分析

报错TypeError: can't multiply sequence by non-int of type 'float'出现在numpy计算加权平均的步骤中,核心原因是权重数组(volume)的数据类型与目标数组(close)不匹配,或者数组中存在非数值类型元素,导致无法完成浮点乘法运算。

解决方案

1. 强制转换权重数组为浮点类型

将volume数组显式转换为float64类型,确保numpy可以正常执行加权运算:

# Separate for vol prof
volume = np.asarray(df['Volume'], dtype=np.float64)
close = np.asarray(df['Close'], dtype=np.float64)

2. 检查并清理缺失值/无效数据

如果数据中存在NaN、None或字符串类型元素,会导致数组类型异常,先检查并处理:

# 检查缺失值
print("Close列缺失值数量:", df['Close'].isna().sum())
print("Volume列缺失值数量:", df['Volume'].isna().sum())

# 清理缺失值(根据需求选择删除或填充)
df = df.dropna(subset=['Close', 'Volume'])
# 或者用均值填充:df['Volume'] = df['Volume'].fillna(df['Volume'].mean())

# 重新转换为numpy数组
volume = np.asarray(df['Volume'], dtype=np.float64)
close = np.asarray(df['Close'], dtype=np.float64)

3. 验证数组形状与类型

转换后可以打印数组信息确认:

print("Close数组类型:", close.dtype)
print("Close数组形状:", close.shape)
print("Volume数组类型:", volume.dtype)
print("Volume数组形状:", volume.shape)

确保两者都是浮点类型,且形状一致(一维数组,长度相同)。

修改后的完整代码片段

# Load data
df = botc.ib.data_saver.get_df(SYMBOL.lower())

# 清理缺失值
df = df.dropna(subset=['Close', 'Volume'])

# Separate for vol prof
volume = np.asarray(df['Volume'], dtype=np.float64)
close = np.asarray(df['Close'], dtype=np.float64)

print("Close:")
print(close)
print("VOLUME:")
print(volume)

# Plot volume profile based on close
px.histogram(df, x="Volume", y="Close", nbins=150, orientation='h').show()

# Kernel Density Estimator
kde_factor = 0.05
num_samples = 500
kde = stats.gaussian_kde(close, weights=volume, bw_method=kde_factor)
xr = np.linspace(close.min(), close.max(), num_samples)
kdy = kde(xr)
ticks_per_sample = (xr.max() - xr.min()) / num_samples

def get_dist_plot(c, v, kx, ky):
    fig = go.Figure()
    fig.add_trace(go.Histogram(name="Vol Profile", x=c, y=v, nbinsx=150,
                               histfunc='sum', histnorm='probability density'))
    fig.add_trace(go.Scatter(name="KDE", x=kx, y=ky, mode='lines'))
    return fig

get_dist_plot(close, volume, xr, kdy).show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:30:58