You need to enable JavaScript to run this app. Node.js使用python-shell调用sklearn聚类报数组维度错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用python-shell调用sklearn聚类报数组维度错误如何解决

问题根源
  • 参数传递类型错误:python-shell的args参数仅支持传入字符串序列,你直接将JS二维数组dataset作为参数传入时,会被自动序列化逗号拼接的扁平字符串。Python侧拿到的sys.argv[1]本质是单个长字符串,不存在二维数组结构,用np.array()转换后只会得到包含单个字符串元素的标量数组,完全不符合sklearn要求的2D输入格式,因此触发报错:

ValueError: Expected 2D array, got scalar array instead

  • 聚类数类型错误:sys.argv[2]拿到的是字符串类型的聚类数量,而AgglomerativeClustering的n_clusters参数要求传入整数,这里也会触发隐式类型错误。
修复方案

1. Node.js侧修改

将二维数组序列化为JSON字符串再传递,避免自动扁平化:

app.post("/route", (req, res) => {
    let dataset = req.body.data;
    let clustNum = req.body.clustNum;
    let options = {
        args: [JSON.stringify(dataset), String(clustNum)]
      };
    PythonShell.run('./hclust.py', options, function (err) {
        if (err) throw err;
        console.log('finished');
      });
    res.send("done")
})

2. Python侧修改

用json模块解析传入的JSON字符串还原数组结构,同时将聚类数转为整数:

import sys
import json
import numpy as np
from sklearn.cluster import AgglomerativeClustering
X = np.array(json.loads(sys.argv[1]))
cluster = AgglomerativeClustering(n_clusters=int(sys.argv[2]), affinity='euclidean', linkage='ward')
cluster.fit_predict(X)

内容的提问来源于stack exchange,提问作者M.KH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 21:18:02