Я конвертирую некоторый код Matlab в Python. Мне нужно сделать некоторые манипуляции с матрицами. Моя матрица (A) есть (прямо сейчас) матрица 65x3. Однако количество строк зависит от того, на каком этапе я участвую в программе.Эффективные операции ndarray
В Matlab, код, я работаю на это:
output = inv(A'*A) * A';
Следующий код Python воспроизводит ожидаемый выход только штрафом. Мне просто интересно, есть ли способ сделать это лучше (более Pythonic, быстрее и т. Д.)? Я пытаюсь придерживаться только базового Python и numpy.
output = np.dot(np.linalg.inv(np.dot(np.transpose(A), A)), np.transpose(A))
Спасибо всем, кто готов помочь.
кроме использования ярлыка 'A.T' для транспонирования, вы не можете сделать намного лучше. (но это действительно просто глазной сахара, не будет иметь никакого реального разницы) – Julien
Похоже, вы вычисляете psuedo-обратную матрицу 'A'. Если вашему приложению не нужно специально вычислять psuedo-inverse, если вы не можете вычислить инверсию, тогда не делайте этого. Эта статья Джона Д. Кука должна дать представление: http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/. Если вы пытаетесь найти решение наименьших квадратов для переопределенной (или недоопределенной) системы уравнений, используйте ['numpy.linalg.lstsq'] (http://docs.scipy.org/doc/numpy/reference/ сгенерированный/numpy.linalg.lstsq.html) для непосредственного вычисления вашего решения. – rayryeng