Python f\x00o\x00r\x00t中的值错误 我将Python嵌入到C++中。我将大量的数据从C++发送到Python,然后在Python上对数据进行操作。在C++中,数据以二维向量的形式存储,浮点是通过元组发送到Python的。

Python f\x00o\x00r\x00t中的值错误 我将Python嵌入到C++中。我将大量的数据从C++发送到Python,然后在Python上对数据进行操作。在C++中,数据以二维向量的形式存储,浮点是通过元组发送到Python的。,python,c++,python-2.7,numpy,scikit-learn,Python,C++,Python 2.7,Numpy,Scikit Learn,现在,我不确定用Python接收数据的格式是什么。是str还是utf-16或utf-8(我甚至不知道这些东西的含义)。我的目标是在Python中以数组的形式接收数据,并对其应用一些scikit学习函数 我能够将numpy.array函数应用于它,并将我刚刚在Python中收到的数据转换为numpy数组。现在,当我将此数组传递给scikit函数时,它会给我一个错误,如u“无效模式,应为'c'或'fortran',得到f\x00o\x00r\x00t” 通过查看不同的帖子,我很确定这与Python读

现在,我不确定用Python接收数据的格式是什么。是str还是utf-16或utf-8(我甚至不知道这些东西的含义)。我的目标是在Python中以数组的形式接收数据,并对其应用一些scikit学习函数

我能够将numpy.array函数应用于它,并将我刚刚在Python中收到的数据转换为numpy数组。现在,当我将此数组传递给scikit函数时,它会给我一个错误,如u“无效模式,应为'c'或'fortran',得到f\x00o\x00r\x00t”

通过查看不同的帖子,我很确定这与Python读取数据的方式有关,即格式,但到处提供的解决方案都是处理读取文件的问题,他们说,无论何时打开文件,都使用utf-16,但在我的场景中,我没有文件,我有Python中的参数。那么,如何以正确的格式读取它们以将它们传递给scikit函数呢

Call from C++ :

pValue = PyObject_CallObject(pFunc, pArgTuple);

Python side :

import numpy as np
import scipy.io
from sklearn import cross_validation
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from FS_package.function.similarity_based import fisher_score
from FS_package.utility import construct_W
def main(*Z):
   aList = []   
   print "I was called with", len(Z), "arguments:"
   for i in range(len(Z) - 1):
       aList.append(Z[i])
   X1 = np.array(aList)
   X = X1.T
   y = np.array(Z[len(Z) - 1])
   n_samples, n_features = X.shape
   num_fea = 100
   neigh = KNeighborsClassifier(n_neighbors=10)
   for train, test in ss:
       selected_features = X[:, idx[0:num_fea]]
       neigh.fit(selected_features[train], y[train])

neigh.fit给了我一个错误。

你能更具体一点吗?你能发布函数调用和堆栈跟踪吗?还有函数参数值(或至少其中的一部分)?我对错误有预感,但在发布正式答案之前,我需要确定。创建一个演示问题的最小示例,其他一切都只是猜测。看起来你有UTF-16数据;小endian,缺少最后一个
\x00
。除非您的数据以
\x00
开头,在这种情况下,它是big-endian。实际上只是发布了相关部分。该函数正在做更多的事情。这在Windows上吗?如果是这样,您在这里处理的是宽字符串(UTF-16)
fortran
恰好是7个字符,数据是7个字节,但显然被截断了。