Форум сайта python.su
0
Привет ребят.У меня тут возникла проблема насчет больших вычислений.У меня есть некий вычислительный метод
“метод релаксации” двумерной матрицы(тензор 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
Офлайн
568
вместо
for i in range(0, self._n + 1): one = sin(pi * self._x[i])
for one in self._x:
range
xrange
Использую обьект numpu.arrayЭто где это Вы его используте?
Офлайн
0
А у меня в конструкторе есть такое обьект self._f = zeros((n,n))
метод zeros возращает обьект array
Офлайн
47
Офлайн
43
Через numpy.nditer быстрей будет. Да и на С можно выносить лишь числодробильню в виде чистых функций, а абстракции делать на питоне.
А вообще тут нужен рабочий пример если хотите чтобы вам помогли
Офлайн
568
keekdownВам лень весь код показать или стыдно или что?
А у меня в конструкторе есть такое обьект self._f = zeros((n,n))метод zeros возращает обьект array
Офлайн
0
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
Офлайн
0
Пожалуйста код модулей
http://pastebin.com/WH9w2uWM
http://pastebin.com/LY62havk
Офлайн
47
если ты используешь numpy.array это не значит что обработка его на python станет быстрой :)
тебе надо использовать функции этого модуля(написанного на C)
python интерпретируемый, циклы в 100 мильенов выполняются медленно
Отредактировано bismigalis (Ноя. 9, 2013 19:34:27)
Офлайн
0
Ну как про С реализацию функций я думал.Я думал что Numpy and Scipy обеспечивают оптимизацию таких вещей…Я посмотрел на одном сайте,какие проекты научно-технического направления были сделаны…я думаю там тоже серьезные вычисления используются.
Офлайн