Haha Marrior Ответов: 0

Cvsvd - cv2.svdecomp


Привет! Мои извинения, если мой формат вопроса не идеален, это мой первый пост здесь. Я пытаюсь заменить следующий код C++ на python. Ниже приведены коды и моя попытка отладки. Я буду ссылаться на форму столбца x строки матрицы как (M,N).

Входные данные: iMeanXYMat, который представляет собой матрицу (1000,2)

Для C++:

cvSVD(iMeanXYMat, pSigma1Mat, U, pCoefficientMat, CV_SVD_V_T);
cvMatMul(U, pSigma1Mat, pSigma1MatResult1);
cvMatMul( pSigma1MatResult1 ,pCoefficientMat, pSigma1MatTransposeCoeff);


Желаемый выход: pSigma1MatTransposeCoeff, матрица (1000,2)

для Python:

pSigma1Mat, U, pCoefficientMat = cv2.SVDecomp(iMeanXYMat)
pSigma1MatResult1= np.matmul(U, pSigma1Mat)
pSigma1MatTransposeCoeff= np.matmul( pSigma1MatResult1 ,pCoefficientMat)


Вывод ошибки: ValueError: фигуры (1000,1) и (2,2) не выровнены: 1 (dim 1) != 2 (dim 0)

Что я уже пробовал:

Я понял, что форма pSigma1Mat должна быть (2,2). Поскольку для python выход pSigma1Mat равен (2,1), что делает pSigma1MatResult1 a (1000,1), что приводит к ошибке при умножении pSigma1MatResult1 a (1000,1) на pCoefficientMat a (2,2).

C++ позволяет выводить `pSigma1Mat` в виде (2,2) или NxN. Однако, похоже, такого решения для python не существует. Я попробовал код ниже, но он тоже не работает.

pSigma1Mat, U, pCoefficientMat = cv2.SVDecomp(iMeanXYMat, flags = cv.SVD_FULL_UV)



Любая помощь будет очень признательна, я буду продолжать смотреть вокруг и обновлять, если найду какое-либо решение. Спасибо!

0 Ответов