При переходе на Python из Matlab я получаю разные результаты для умножения и возведения в степень матрицы.
Это простая реализация классификатора softmax.Я запускаю код Python, экспортирую переменные как файл mat и запускаю исходный код Matlab, загружаю переменные, экспортированные из Python, и сравниваю их.
Код Python:
f = np.array([[4714, 4735, 4697], [4749, 4748, 4709]])
f = f.astype(np.float64)
a = np.array([[0.001, 0.001, 0.001], [0.001, 0.001, 0.001], [0.001, 0.001, 0.001]])
reg = f.dot(a)
omega = np.exp(reg)
sumomega = np.sum(omega, axis=1)
io.savemat('python_variables.mat', {'p_f': f,
'p_a': a,
'p_reg': reg,
'p_omega': omega,
'p_sumomega': sumomega})
Код Matlab:
f = [4714, 4735, 4697; 4749, 4748, 4709];
a = [0.001, 0.001, 0.001; 0.001, 0.001, 0.001; 0.001, 0.001, 0.001];
reg = f*a;
omega = exp(reg);
sumomega = sum(omega, 2);
load('python_variables.mat');
Я сравниваю результаты, проверяя следующее:
norm(f - p_f) = 0
norm(a - p_a) = 0
norm(reg - p_reg) = 3.0767e-15
norm(omega - p_omega) = 4.0327e-09
norm(omega - exp(p_f*p_a)) = 0
Таким образом, разница, по-видимому, вызвана умножением, и она становится намного больше с exp ().И моя исходная матрица данных больше, чем эта.Я получаю гораздо большие значения omega:
norm(reg - p_reg) = 7.0642e-12
norm(omega - p_omega) = 1.2167e+250
Это также приводит к тому, что в некоторых случаях sumomega обращается к inf или к нулю в Python, но не в Matlab, поэтому выходные данные классификатора отличаются.
Чтоя здесь скучаю?Как я могу исправить, чтобы получить точно такие же результаты?