将矢量从 C# 传递到 Python
Passing a vector from C# to Python
- 我使用 Python.Net 与 Python 库进行 C# 交互。我解决了文本分类的问题。我用的是FastText来索引和获取向量,还有Sklearn来训练分类器(Knn)。在实现过程中遇到了很多问题,但是都解决了,除了一个。
在收到我训练 Knn 的文本向量后,我将它们保存到一个单独的文本文件中,然后在必要时使用它。
string loadKnowVec = File.ReadAllText("vectorKnowClass.txt", Encoding.Default);
string[] splitKnowVec = loadKnowVec.Split('\r');
splitKnowVec = splitKnowVec.Where(x => x != "").ToArray();
for()
{
keyValues_vector.Add(float.Parse(splitKnowVec[i], NumberFormatInfo.InvariantInfo), 1);
}
dynamic X_vec = np.array(keyValues_vector.Keys.ToArray()).reshape(-1, 1);
dynamic y_tag = np.array(keyValues_vector.Values.ToArray());
dynamic neigh = KNN(n_neighbors: 3);
dynamic KnnFit = neigh.fit(X_vec, y_tag);
string predict = neigh.predict("0.00889");
MessageBox.Show("Скорее всего это: "+predict);
我在训练分类器的时候,遇到这样一个问题,从c#到python,不是float类型的值,而是System.Single[]的值。
Python.Runtime.PythonException: "TypeError : float() argument must be a string or a number,
not 'Single[]'
此时动态 X_vec 的存储值为“System.Single[]”。(我认为这正是问题所在)
2.At首先我尝试手动设置X_vec的值,但是错误和它的值是一样的。
最初的想法是使用numpy库改变数组类型,但是没有用,还给出了"".
dynamic Xx = np.array(X_vec, dtype: "float");
dynamic yY = np.array(y_tag, dtype: "int");
接下来,尝试在更改数据类型之前,预先创建一个空数组并加载特定值,但这也没有用。
可能是我不明白MSVS19IDE和python解释器的构成和交互的原理
我解决了这个问题几天,每次我都认为值得阅读 python.net 上的文档。
结果,我找到了一个解决方案,结果证明它很平庸,有必要将 X_vec
表示为 float[]
而不是 List<float>
List<float> vectors = keyValues_vector.Keys.ToList();
List<int> classTag = keyValues_vector.Values.ToList();
dynamic a = np.array(vectors);
dynamic X_vec = a.reshape(-1, 1);
dynamic y_tag = np.array(classTag);
- 我使用 Python.Net 与 Python 库进行 C# 交互。我解决了文本分类的问题。我用的是FastText来索引和获取向量,还有Sklearn来训练分类器(Knn)。在实现过程中遇到了很多问题,但是都解决了,除了一个。 在收到我训练 Knn 的文本向量后,我将它们保存到一个单独的文本文件中,然后在必要时使用它。
string loadKnowVec = File.ReadAllText("vectorKnowClass.txt", Encoding.Default);
string[] splitKnowVec = loadKnowVec.Split('\r');
splitKnowVec = splitKnowVec.Where(x => x != "").ToArray();
for()
{
keyValues_vector.Add(float.Parse(splitKnowVec[i], NumberFormatInfo.InvariantInfo), 1);
}
dynamic X_vec = np.array(keyValues_vector.Keys.ToArray()).reshape(-1, 1);
dynamic y_tag = np.array(keyValues_vector.Values.ToArray());
dynamic neigh = KNN(n_neighbors: 3);
dynamic KnnFit = neigh.fit(X_vec, y_tag);
string predict = neigh.predict("0.00889");
MessageBox.Show("Скорее всего это: "+predict);
我在训练分类器的时候,遇到这样一个问题,从c#到python,不是float类型的值,而是System.Single[]的值。
Python.Runtime.PythonException: "TypeError : float() argument must be a string or a number,
not 'Single[]'
此时动态 X_vec 的存储值为“System.Single[]”。(我认为这正是问题所在)
2.At首先我尝试手动设置X_vec的值,但是错误和它的值是一样的。 最初的想法是使用numpy库改变数组类型,但是没有用,还给出了"".
dynamic Xx = np.array(X_vec, dtype: "float");
dynamic yY = np.array(y_tag, dtype: "int");
接下来,尝试在更改数据类型之前,预先创建一个空数组并加载特定值,但这也没有用。
可能是我不明白MSVS19IDE和python解释器的构成和交互的原理
我解决了这个问题几天,每次我都认为值得阅读 python.net 上的文档。
结果,我找到了一个解决方案,结果证明它很平庸,有必要将 X_vec
表示为 float[]
而不是 List<float>
List<float> vectors = keyValues_vector.Keys.ToList();
List<int> classTag = keyValues_vector.Values.ToList();
dynamic a = np.array(vectors);
dynamic X_vec = a.reshape(-1, 1);
dynamic y_tag = np.array(classTag);