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