#python #node.js
Вопрос:
я пытаюсь использовать python в своем node.js проект с использованием оболочки npm python, мой скрипт python направлен на иерархическую кластеризацию набора данных с использованием библиотеки sklearn. я отправляю набор данных в виде 2d массива в скрипт python, но получаю эту странную ошибку
Измените форму данных либо с помощью array.reshape(-1, 1), если ваши данные содержат одну функцию, либо array.reshape(1, -1), если они содержат одну ошибку выборки.
в сообщении об ошибке также говорится:
ValueError: Expected 2D array, got scalar array instead:rn
array=0.593934222,0.249954941,0.213356151,0.128768518,0.597381076,0.191858507,0.578032151,0.572388127,0.32216372,0.524071895,0.248102058,0.190557532,0.110445891,0.310592749,0.609993217,0.384038873,0.751802054,0.769711062,0.761773915,0.34313952,0.269207149,0.154800021,0.51600189,0.215849563,0.931827523,0.380445861,0.155714978,0.855579232,0.396393924,0.236950661,0.145275841,0.249733315,0.858764558,0.61553417,0.752858691,0.545378696,0.40406226,0.203121647,0.195151239,0.109380912,0.496808461,0.145746866,0.220833125,0.246972535,0.576208892.rn
я погуглил его, и кажется, что эта ошибка возникает, когда вы отправляете массив 1d, хотя я отправляю массив 2d.
вот код на python
import sys
import numpy as np
from sklearn.cluster import AgglomerativeClustering
X = np.array(sys.argv[1])
cluster = AgglomerativeClustering(n_clusters=sys.argv[2], affinity='euclidean', linkage='ward')
cluster.fit_predict(X)
вот код js узла, в котором вызывается скрипт python, я просто пытаюсь заставить его работать сейчас, так что подробностей немного
app.post("/route", (req, res) => {
let dataset=req.body.data;
let clustNum=req.body.clustNum;
let options = {
args: [dataset,clustNum]
};
PythonShell.run('./hclust.py', options, function (err) {
if (err) throw err;
console.log('finished');
});
res.send("done")
})
вот пример того, как выглядят мои массивы данных:
[
[
0.593934222, 0.249954941,
0.213356151, 0.128768518,
0.597381076, 0.191858507,
0.578032151, 0.572388127,
0.32216372
],
[
0.524071895, 0.248102058,
0.190557532, 0.110445891,
0.310592749, 0.609993217,
0.384038873, 0.751802054,
0.769711062
],
[
0.761773915, 0.34313952,
0.269207149, 0.154800021,
0.51600189, 0.215849563,
0.931827523, 0.380445861,
0.155714978
],
[
0.855579232, 0.396393924,
0.236950661, 0.145275841,
0.249733315, 0.858764558,
0.61553417, 0.752858691,
0.545378696
],
[
0.40406226, 0.203121647,
0.195151239, 0.109380912,
0.496808461, 0.145746866,
0.220833125, 0.246972535,
0.576208892
]
]
Что я делаю не так?
Комментарии:
1. Какую именно ошибку вы видите? Можете ли вы воспроизвести эту проблему без материала узла? Если это так, вы можете удалить все материалы узла из обсуждения, поскольку это отвлекает от вашей реальной проблемы. = = = = = = = = Предположение: вам нужно преобразовать sys.argv[2] из строки в целое число, например
n_clusters=int(sys.argv[2])
.2. ну, когда я попробовал точно такой же код с тем же массивом выше, используя чистый python, он работал без проблем, поэтому я думаю, что есть проблема в передаче аргументов между узлом и оболочкой python