Я встраиваю Python в C ++. Я отправляю большой объем данных из C ++ в Python, а затем выполняю манипуляции с данными в Python. В C ++ данные хранятся в виде двумерного вектора с плавающей точкой, который через Tuple я отправляю в Python.
Теперь я не уверен, в каком формате данные получены в Python. Это в str или utf-16 или utf-8 (я даже не знаю, что означают эти вещи). Моя цель — просто получить данные в виде массива здесь, в Python, и применить к нему некоторые функции scikit-learn.
Я могу применить к нему функции numpy.array и преобразовать данные, которые я только что получил в Python, в массивы numpy. Теперь, когда я передаю этот массив функциям scikit, он выдает мне ошибку типа «Неверный режим, ожидаемый« 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])
Сосед.фит дает мне ошибку.
Задача ещё не решена.