Форум программистов, компьютерный форум CyberForum.ru

Python: научные вычисления

Войти
Регистрация
Восстановить пароль
 
DarkPower
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 80
#1

NumPy перерасчет масива - Python

23.11.2016, 13:31. Просмотров 328. Ответов 7
Метки нет (Все метки)

У меня тут пару вопросов:
1) Можно ли средствами NumPy перерасчетать массив?
массив raster размером 10000х10000
формула расчета:
Python
1
rater[i,j] = raster[i,j]*var_1+var2
Сам делаю обычным способом через 2 цикла:
Python
1
2
3
4
5
6
while i < 10000:
    j = 0
    while j < 10000:
        raster[j, i] = raster[i,j]*var_1+var2
        j = j +1
    i = i + 1
Но выполняется долго.
2) Как сделать перерасчет быстрее? Проц. Intel Core i5-6600K 3.5
3) Может создать 4 потока по 2500 перасчитовать? Где про это можно почитать?

4) NumPy быстрее обрабатывает массив чем способ указанный выше?
5) Можно ли как-то его тоже в 4 потока кинуть?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2016, 13:31     NumPy перерасчет масива
Посмотрите здесь:

Установка NumPy Python
NumPy для python 3.4 win64 Python
Numpy.matrix и функции Python
Python Установка numpy
Ошибка при установке numpy Python
Python NumPy, Matplotlib
Python Замена цвета по маске в numpy
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jabbson
Модератор
Эксперт по компьютерным сетям
2966 / 2075 / 391
Регистрация: 03.11.2009
Сообщений: 6,574
Записей в блоге: 3
23.11.2016, 16:28     NumPy перерасчет масива #2
да, можно

Python
1
raster*var_1-var2
у меня выполняется около 3 секунд при размере 10к на 10к
DarkPower
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 80
23.11.2016, 19:36  [ТС]     NumPy перерасчет масива #3
Цитата Сообщение от Jabbson Посмотреть сообщение
да, можно
PythonВыделить код
1
raster*var_1-var2
у меня выполняется около 3 секунд при размере 10к на 10к
А можете полностью написать код
Python
1
2
3
raster = numpy.array(gdalBand.ReadAsArray()) 
start_time = time.clock()
raster = K2 / (Ml*raster+Al + 1) #тут ошибку выдает TypeError: only length-1 arrays can be converted to python scalars
Jabbson
Модератор
Эксперт по компьютерным сетям
2966 / 2075 / 391
Регистрация: 03.11.2009
Сообщений: 6,574
Записей в блоге: 3
23.11.2016, 19:47     NumPy перерасчет масива #4
если покажите что в переменных во всех, а то я понятия не имею, что за gdal (и кого он собственно "ждал" )
DarkPower
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 80
23.11.2016, 20:03  [ТС]     NumPy перерасчет масива #5
Цитата Сообщение от Jabbson Посмотреть сообщение
если покажите что в переменных во всех, а то я понятия не имею, что за gdal (и кого он собственно "ждал" )
Окей.
Python
1
2
3
4
5
6
7
8
9
#gdalBand.ReadAsArray() - массив чисел типа float, [10k,10k]
raster = numpy.array(gdalBand.ReadAsArray()) #Собственно (как я понял) array to numpy.array
start_time = time.clock() #тут замеряем время
#raster = K2 / (math.log(K1/(Ml*raster+Al) + 1))
'''
K2 - тип float 1321.07 или 1201.14
K1 - тип float 774.88 или 480.88
Ml и Al тоже тип float
'''
Этот код выполняется 140сек:
Python
1
2
3
4
5
6
7
8
9
raster = numpy.array(gdalBand.ReadAsArray())
start_time = time.clock()
#raster = K2 / (math.log(K1/(Ml*raster+Al) + 1))
for col in range(xsize):
    for row in range(ysize):
        L = Ml*raster[row,col]+Al
        raster[row,col] = K2 / (math.log(K1/L + 1))
end_time = time.clock() 
print "\ttime(sec) = " + str(end_time-start_time)
Jabbson
Модератор
Эксперт по компьютерным сетям
2966 / 2075 / 391
Регистрация: 03.11.2009
Сообщений: 6,574
Записей в блоге: 3
23.11.2016, 21:16     NumPy перерасчет масива #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от DarkPower Посмотреть сообщение
math.log
--> numpy.log

Добавлено через 3 минуты
у меня с массивом в 10к х 10к
Python
1
raster = K2 / (np.log(K1/(Ml*raster+Al) + 1))
выполняется от 4 до 6 секунд
DarkPower
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 80
23.11.2016, 21:23  [ТС]     NumPy перерасчет масива #7
Цитата Сообщение от Jabbson Посмотреть сообщение
math.log
--> numpy.log
Спасибо
с 130сек на 1,5сек упало =))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2016, 21:56     NumPy перерасчет масива
Еще ссылки по теме:

Numpy array Python
Numpy, бинарные операции с матрицами Python
Подключение NumPy Python
NumPy ValueError Python
Python Запись из файла в NumPy массив

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jabbson
Модератор
Эксперт по компьютерным сетям
2966 / 2075 / 391
Регистрация: 03.11.2009
Сообщений: 6,574
Записей в блоге: 3
23.11.2016, 21:56     NumPy перерасчет масива #8
всегда пожалуйста
Yandex
Объявления
23.11.2016, 21:56     NumPy перерасчет масива
Ответ Создать тему
Опции темы

Текущее время: 06:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru