Использование Numpy на разных платформах

У меня есть фрагмент кода, который вычисляет разложение Гельмгольца-Ходжа. Я работал на своей Mac OS Yosemite, и он работал нормально. Месяц назад, однако, мой Mac стал довольно медленным (он был действительно старым), и я решил купить новый ноутбук (Windows 8.1, Dell).

После установки всех библиотек Python и т.д., я продолжил работу над этим же кодом (версией в Git). И тогда результат был довольно странным, полностью отличным от результата, полученного в старой тетради.

Например, я создаю для матриц a и b (действительно долгое исчисление), а затем я вызываю решатель:

s = numpy.linalg.solve(a, b)

Это возвращало a (неверно и отличалось от результата, полученного на моем Mac, который был прав).

Затем я попытался использовать:

s = scipy.linalg.solve(a, b)

И программа выходит с кодом 0, но в середине. Затем я просто сделал простой тест:

print 'here1'
s = scipy.linalg.solve(a, b)
print 'here2'

И here2 никогда не печатается.

Я пробовал:

print 'here1'
x, info = numpy.linalg.cg(a, b)
print 'here2'

И то же самое происходит.

Я также попытался проверить решение после использования numpy.linalg.solve:

print numpy.allclose(numpy.dot(a, s), b)

И я получил False (?!).

Я не знаю, что происходит, как найти решение, я просто знаю, что тот же код работает на моем Mac, но было бы очень хорошо, если бы я мог запускать его на других платформах. Теперь я застрял в этой проблеме (у меня больше нет Mac) и не имеет понятия о причине.

Самое странное, что я не получаю никакой ошибки при предупреждении о запуске, обратной связи вообще.

Спасибо за любую помощь.

EDIT:

Результаты теста на количество штук:

enter image description here

Результаты испытаний Scipy Suit:

enter image description here

Ответы

Ответ 1

Загрузить менеджер пакетов Anaconda

http://continuum.io/downloads

Когда вы загрузите это, у вас уже будут все зависимости для numpy для вас. Он устанавливается локально и будет работать на большинстве платформ.

Ответ 2

На самом деле это не ответ, но в этом блоге подробно обсуждается проблема наличия короткой экосистемы, которая быстро развивается за счет воспроизводимости.

Кстати, какую версию numpy вы используете? документация для последней версии 1.9 не сообщает о методе cg как о том, который вы используете...

Я предлагаю использовать этот пример, чтобы вы (и другие) могли проверить результаты.

>>> import numpy as np
>>> import scipy.linalg
>>> np.random.seed(123)
>>> a = np.random.random(size=(10000, 10000))
>>> b = np.random.random(size=(10000,))
>>> s_np = np.linalg.solve(a, b)
>>> s_sc = scipy.linalg.solve(a, b)
>>> np.allclose(s_np,s_sc)
>>> s_np
array([-15.59186559,   7.08345804,   4.48174646, ..., -16.43310046,
    -8.81301553, -10.77509242])

Ответ 3

Надеюсь, вы найдете ответ - в будущем один вариант - создать виртуальную машину для каждого из ваших проектов, используя Docker. Это позволяет легко переносить.

Смотрите замечательную статью здесь, обсуждая Docker для исследования.