Ранг точечного произведения матрицы и ее транспонирования не совпадает с рангом самой матрицы с использованием numpy linalg - PullRequest
0 голосов
/ 17 февраля 2020

Описание
Предполагается, что ранг точечного произведения матрицы M, например, предполагается равным рангу самой матрицы М.

Но в моем случае, для матрицы 3 * N (N в [1,10]) матрица M с элементами - все маленькие числа с плавающей точкой, ранг произведения (размер 3 * 3) иногда на 1 или 2 меньше, чем исходный ранг матрица. Например, rank (M) = 3, а rank (M точка MT) = 2 или 1.

Я думаю, что эта проблема связана с тем, как python вычисляет числа с плавающей запятой. Я спрашиваю, есть ли способ обойти эту проблему.

Что я сделал
Матрица M (3 * N) выглядит примерно так:

[[0.03128361838, 0.02947628195, 0.037265173248, 0.032318231454, ...]  
 [0.02984265281, 0.02887564182, 0.018742561825, 0.037256182456, ...]  
 [0.02387356229, 0.02837652823, 0.047173658438, 0.057423714856, ...]] 

Я получаю произведение его транспонирования на

np.dot(M, M.T)

и вычисляю ранг через

la.matrix_rank(M)
...