czc839 2023-10-13 01:40 采纳率: 0%
浏览 1159
已结题

python报错TypeError: len() of unsized object

代码如图所示,想做一个根据样本的轨迹预测

img

img


但是运行后报错如下

img


教一下怎么改啊 熬了好久了不会,时间很紧迫,谢谢大家

  • 写回答

12条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-13 08:14
    关注
    获得0.75元问题酬金

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    可能解决问题的思路与方法1:
    根据报错信息,问题出在len()函数调用上。len()函数只能用于可迭代的对象,而在这里xy被定义为np.array,没有明确指定对象的长度。为了解决这个问题,可以使用shape属性来获取数组的长度,如下所示:

    x_pred = f(np.linspace(0, len(x)-1, num=100))
    
    f = interp1d(np.arange(x.shape[0]), x)
    x_pred = f(np.linspace(0, x.shape[0]-1, num=100))
    
    f = interp1d(np.arange(y.shape[0]), y)
    y_pred = f(np.linspace(0, y.shape[0]-1, num=100))
    

    请注意,你需要对所有使用len()的地方进行修改,以适应shape属性的用法。

    可能解决问题的思路与方法2:
    这个错误通常是由于传入interp1d函数的ndarray对象没有确定的长度导致的。这可能是因为nearest_traj['位置X (千米)']nearest_traj['位置Y (千米)']这两个数组没有正确地传递给xy

    要解决这个问题,你可以先打印出nearest_traj['位置X (千米)']nearest_traj['位置Y (千米)']的值,确保它们是有效的ndarray。同时,你还可以尝试将xy转换为列表,即x = list(np.array(nearest_traj['位置X (千米)']))y = list(np.array(nearest_traj['位置Y (千米)']))再进行插值。

    下面是修改后的代码:

    import pandas as pd
    import numpy as np
    from sklearn.cluster import DBSCAN
    from sklearn.preprocessing import StandardScaler
    from scipy.interpolate import interp1d
    import matplotlib.pyplot as plt
    
    # 读取Excel文件中的多个sheet
    excel_file = pd.ExcelFile('到达a.xlsx')
    sheet_names = excel_file.sheet_names
    
    # 将所有sheet的数据合并到一个DataFrame中
    data = pd.DataFrame() 
    for sheet_name in sheet_names :
        df = excel_file.parse(sheet_name)
        df['sheet_name'] = sheet_name
        data = data.append(df, ignore_index=True)
    
    # 数据预处理
    data.dropna(inplace=True) # 删除缺失值
    data.drop_duplicates(inplace=True) #删除重复值
    
    # 添加新的起点数据
    start_point = [1200,700] #新的起点坐标
    new_data = pd.DataFrame({'位置X (千米)':[start_point[0]],'位置Y (千米)':[start_point[1]],'sheet_name': ['新起点']})
    data = data.append(new_data, ignore_index=True)
    
    # 轨迹聚类
    X = data[['位置X (千米)','位置Y (千米)']]
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    
    dbscan = DBSCAN(eps=0.1, min_samples=5)
    clusters = dbscan.fit_predict(X_scaled)
    
    data['cluster'] = clusters
    
    # 轨迹预测
    # 找到起点所在的类别
    start_cluster = data[data['sheet_name'] == '新起点']['cluster'].values[0]
    
    # 从该类别中选择距离起点最近的轨迹
    nearest_traj = data[data['cluster'] == start_cluster].iloc[0]
    
    # 对预测轨迹进行插值
    x = list(np.array(nearest_traj['位置X (千米)']))
    y = list(np.array(nearest_traj['位置Y (千米)']))
    f = interp1d(np.arange(len(x)), x)
    x_pred = f(np.linspace(0, len(x)-1, num=100))
    
    f = interp1d(np.arange(len(y)), y)
    y_pred = f(np.linspace(0, len(y)-1, num=100))
    
    # 绘制轨迹曲线
    plt.plot(x_pred, y_pred)
    plt.xlabel('位置X(千米)')
    plt.ylabel('位置y(千米)')
    plt.title('轨迹预测')
    plt.show()
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题