Найти - Пользователи
Полная версия: Вычислительные рассчеты
Начало » Python для новичков » Вычислительные рассчеты
1 2 3
keekdown
Привет ребят.У меня тут возникла проблема насчет больших вычислений.У меня есть некий вычислительный метод
“метод релаксации” двумерной матрицы(тензор 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 как и другие языки..
FishHook
вместо
for i in range(0, self._n + 1):
    one = sin(pi * self._x[i])
делай просто
for one in self._x:

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

Использую обьект numpu.array
Это где это Вы его используте?
keekdown
А у меня в конструкторе есть такое обьект self._f = zeros((n,n))
метод zeros возращает обьект array
bismigalis
http://wiki.scipy.org/Numpy_Example_List#fromfunction не подойдет?
sergeek
Через numpy.nditer быстрей будет. Да и на С можно выносить лишь числодробильню в виде чистых функций, а абстракции делать на питоне.
А вообще тут нужен рабочий пример если хотите чтобы вам помогли
FishHook
keekdown
А у меня в конструкторе есть такое обьект self._f = zeros((n,n))метод zeros возращает обьект array
Вам лень весь код показать или стыдно или что?
keekdown
    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 двумерные массивы.размер их я написал.
а это рабочий пример необходимых вычислений
keekdown
Пожалуйста код модулей
http://pastebin.com/WH9w2uWM
http://pastebin.com/LY62havk
bismigalis
если ты используешь numpy.array это не значит что обработка его на python станет быстрой :)
тебе надо использовать функции этого модуля(написанного на C)
python интерпретируемый, циклы в 100 мильенов выполняются медленно
keekdown
Ну как про С реализацию функций я думал.Я думал что Numpy and Scipy обеспечивают оптимизацию таких вещей…Я посмотрел на одном сайте,какие проекты научно-технического направления были сделаны…я думаю там тоже серьезные вычисления используются.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB