По определению квадратная матрица с нулевым определителем не должна быть обратимой. Однако по какой-то причине после создания ковариационной матрицы я успешно беру ее инверсию, но получение определителя ковариационной матрицы заканчивается выходом 0,0.
Что потенциально может пойти не так? Должен ли я не доверять выходу определителя или не доверять обратной матрице ковариаций? Или оба?
Фрагмент моего кода:
cov_matrix = np.cov(data)
adjusted_cov = cov_matrix + weight*np.identity(cov_matrix.shape[0]) # add small weight to ensure cov_matrix is non-singular
inv_cov = np.linalg.inv(adjusted_cov) # runs with no error, outputs a matrix
det = np.linalg.det(adjusted_cov) # ends up being 0.0
nv_cov = np.linalg(adjusted_cov)
, вы имеете в видуnv_cov = np.linalg.inv(adjusted_cov)
? и действительно лиdet = np.linalg(adjusted_cov)
должно бытьdet = np.linalg.det(adjusted_cov)
? - person gboffi   schedule 25.02.2015adjusted_cov
иinv_cov
(приблизительно) единичной матрицей. Если это так, то numpy, вероятно, не за горами, особенно если это происходит для нескольких тестовых случаев. - person BobChao87   schedule 25.02.2015decimal.Decimal
, который поддерживает произвольную точность. Это добавит много накладных расходов к любым вычислениям, выполняемым с помощью этого метода, поэтому я бы рекомендовал использоватьDecimal
только в случае крайней необходимости. - person BobChao87   schedule 25.02.2015