Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2013 18:30:00

keekdown
Зарегистрирован: 2013-11-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

Привет ребят.У меня тут возникла проблема насчет больших вычислений.У меня есть некий вычислительный метод
“метод релаксации” двумерной матрицы(тензор 2 ранга).Размер матрицы 10000х10000.Использую обьект numpu.array и получается не очень так скажем “быстро”….У меня заполнение данными матрицы уходит где то 3-4 минуты.Это только заполнение…Есть еще вычисления,где как бы “крутая индексация массива”.Я язык начал недавно изучать и мне он очень понравился…на С\С++ как то переходить…лень..
Вот просто тупой пример кода,который выполняется 3-4 минуты.

def CalcF(self):
        const = 2 * pi * pi
        for i in range(0, self._n + 1):        # 0,10000 включая
            one = sin(pi * self._x[i])
            for j in range(0, self._n + 1):    #тоже самое
                    two = sin(pi * self._y[j])
                    self._f[i][j] = const * one * two #заполняем
        return self._f
Есть какой нибудь способ быстрой индексации?Или что то в этом духе.А то как то странно..я читал статью что python может работать с HPC как и другие языки..

Офлайн

#2 Ноя. 9, 2013 18:46:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

вместо

for i in range(0, self._n + 1):
    one = sin(pi * self._x[i])
делай просто
for one in self._x:

range
заменить на
xrange

Использую обьект numpu.array
Это где это Вы его используте?



Офлайн

#3 Ноя. 9, 2013 18:52:29

keekdown
Зарегистрирован: 2013-11-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

А у меня в конструкторе есть такое обьект self._f = zeros((n,n))
метод zeros возращает обьект array

Офлайн

#4 Ноя. 9, 2013 18:58:09

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

Офлайн

#5 Ноя. 9, 2013 18:59:22

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

Через numpy.nditer быстрей будет. Да и на С можно выносить лишь числодробильню в виде чистых функций, а абстракции делать на питоне.
А вообще тут нужен рабочий пример если хотите чтобы вам помогли

Офлайн

#6 Ноя. 9, 2013 19:01:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

keekdown
А у меня в конструкторе есть такое обьект self._f = zeros((n,n))метод zeros возращает обьект array
Вам лень весь код показать или стыдно или что?



Офлайн

#7 Ноя. 9, 2013 19:04:32

keekdown
Зарегистрирован: 2013-11-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

    def CalcURelax(self, h, w, u, f):
        for i in range(1, self._n - 1):
            for j in range(1, self._n - 1):
                one = (pow(h, 2) * w * f[i][j]) / 4
                two = w / 4 * (self._u[i - 1][j] + self._u[i][j - 1] + self._u[i + 1][j] + self._u[i][j + 1])
                three = (1 - w) * self._u[i][j]
                self._u[i][j] = one + two + three
В этот метод передается константа h,w.
u,f двумерные массивы.размер их я написал.
а это рабочий пример необходимых вычислений

Офлайн

#8 Ноя. 9, 2013 19:07:39

keekdown
Зарегистрирован: 2013-11-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

Пожалуйста код модулей
http://pastebin.com/WH9w2uWM
http://pastebin.com/LY62havk

Офлайн

#9 Ноя. 9, 2013 19:10:10

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

если ты используешь numpy.array это не значит что обработка его на python станет быстрой :)
тебе надо использовать функции этого модуля(написанного на C)
python интерпретируемый, циклы в 100 мильенов выполняются медленно

Отредактировано bismigalis (Ноя. 9, 2013 19:34:27)

Офлайн

#10 Ноя. 9, 2013 19:16:25

keekdown
Зарегистрирован: 2013-11-09
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вычислительные рассчеты

Ну как про С реализацию функций я думал.Я думал что Numpy and Scipy обеспечивают оптимизацию таких вещей…Я посмотрел на одном сайте,какие проекты научно-технического направления были сделаны…я думаю там тоже серьезные вычисления используются.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version