Ответ 1
Загрузить менеджер пакетов Anaconda
Когда вы загрузите это, у вас уже будут все зависимости для 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:
Результаты теста на количество штук:
Результаты испытаний Scipy Suit:
Загрузить менеджер пакетов Anaconda
Когда вы загрузите это, у вас уже будут все зависимости для numpy для вас. Он устанавливается локально и будет работать на большинстве платформ.
На самом деле это не ответ, но в этом блоге подробно обсуждается проблема наличия короткой экосистемы, которая быстро развивается за счет воспроизводимости.
Кстати, какую версию 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])
Надеюсь, вы найдете ответ - в будущем один вариант - создать виртуальную машину для каждого из ваших проектов, используя Docker. Это позволяет легко переносить.
Смотрите замечательную статью здесь, обсуждая Docker для исследования.