Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16

Как ускорить обработку обработку данных в Пайтон?!?!

01.12.2018, 22:55. Показов 2440. Ответов 9

Студворк — интернет-сервис помощи студентам
Можно ли как-то ускорить обработку данных в Пайтон?!?!
Мне нужно таблицу умножения I строк на J столбцов, где потом посчитать количество четных, количество делящихся на 3, потом тех, что делятся на 5 и вывести результат. Программа работает классно, но когда я создаю таблицу большую, например 900 строке и 900 столбцов, то минут 5 обрабатывает данные, а мне нужно уложиться в 1 секунду. Вопрос: можно ли ускорить обработку данных, или Пайтон сам по себе долго обрабатывает ????
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
f=open("input.txt","r")
a=f.read().split()
c1=int(a[0])
c2=int(a[1])
mas=[]
for i in range(c1):
    mas.append([])
    for j in range(c2):
        mas[i].append((i+1)*(j+1))
black=0
for i in range(c1):
    for j in range(c2):
        black=black+1
red=[]
for i in range(c1):
    for j in range(c2):
        if mas[i][j]%2==0:
            red.append(mas[i][j])
green=[]
for i in range(c1):
    for j in range(c2):
        if mas[i][j]%3==0:
            green.append(mas[i][j])
for i in range(len(green)):
    if green[i] in red:
        b=red.index(green[i])
        red.pop(b)
blue=[]
for i in range(c1):
    for j in range(c2):
        if mas[i][j]%5==0:
            blue.append(mas[i][j])
for i in range(len(blue)):
    if blue[i] in red:
        b1=red.index(blue[i])
        red.pop(b1)
for i in range(len(blue)):
    if blue[i] in green:
         b2=green.index(blue[i])
         green.pop(b2)
red_k=len(red)
blue_k=len(blue)
green_k=len(green)
black=black-red_k-green_k-blue_k
with open("output.txt","w") as f:
    f.write("RED:"+str(red_k))
    f.write("\n")
    f.write("GREEN:"+str(green_k))
    f.write("\n")
    f.write("BLUE:"+str(blue_k))
    f.write("\n")
    f.write("BLACK:"+str(black))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2018, 22:55
Ответы с готовыми решениями:

Как ускорить обработку файла
Можно ли как-то ускорить обработку файла, который содержит тысячи строк? Нужно перебрать все строки в файле, сравнивая начало выбранной...

Оптимизация UnsafeBitmap, или как ещё можно ускорить обработку Изображений?
Доброго времени суток.. У меня возникла такая проблема, пишу библиотеку на C# для работы с 2D графикой, в её функционал входит генерация,...

Ускорить отрисовку и обработку
Всем привет, суть какая, на странице порядка 200000+ span, переодически разом можен измениться стиль для тысяч span. Хотелось бы услышать...

9
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.12.2018, 01:41
Цитата Сообщение от horbachhvl Посмотреть сообщение
Пайтон сам по себе долго обрабатывает
Долго. Но не столько, сколько ты думаешь. Если писать так, как ты - даже на Си будет адски медленно.
Если тебе нужно в магазине три вещи - зачем ходить за ними трижды?

P.S. У меня код по поиску чисел кратных 2,3,5 работает 0.8 секунд без учета времени на создание матрицы 900x900 (список списков создается за 0.2 сек.)

Зачем удалять пересечение списков чисел тупым перебором, когда есть set?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.12.2018, 02:42
Цитата Сообщение от horbachhvl Посмотреть сообщение
но когда я создаю таблицу большую, например 900 строке и 900 столбцов,
Зачем ее вообще создавать для этой задачи?
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16
02.12.2018, 19:43  [ТС]
ЗАДАЧА: Таблицей умножения назовем таблицу размера n строк на m столбцов, в которой на
пересечении i-й строки и j-го столбца размещено число i * j (строки и столбцы нумеруются
с единицы).
В одной из математических школ было решено провести педагогический
эксперимент. Для того, чтобы ученикам было проще запоминать таблицу
умножения, некоторые числа в ней будут окрашены в красный, некоторые - в синий, а некоторые - в
зеленый цвет (остальные цифр будут черными).

Процесс окрашивания чисел можно условно разбить на четыре этапа. на первом
этапе все числа окрашиваются в черный цвет. На втором - все четные числа красятся
в красный цвет, на третьем - все числа, делящиеся на 3, окрашиваются в зеленый
цвет, на четвертом - все числа, делящиеся на 5, окрашиваются в синий цвет.
Директор школы хочет знать, какое количество картриджей для принтеров необходимо
закупить для печати таблиц. Поэтому ему необходима информация о том, сколько цифр
какого цвета будет в раскрашенной таким образом таблицы умножения n на m. Напишите
программу, которая поможет в подсчете таких количеств.
Входные данные. Строка содержит два натуральных числа n и m (1 ≤ n, m ≤ 1000).
Исходные данные. В первой строке выведите количество чисел, окрашенных в красный
цвет, во второй - в зеленый, в третий - в синий, в четвертой - в черный. следуйте
формата, приведенному в примерах.
Примеры входных и выходных данных
input.txt
10 10
output.txt
RED : 21
GREEN : 39
BLUE : 36
BLACK : 4

Помогите, чтобы программа выполнялась быстро. Или скажите, что не так. Там много тестов и последние большие числа

Добавлено через 4 минуты
Там кроме цифр, которые повторяются, имеют удаляться числа из следующих условий ... посмотри условие снизу ... можешь с кодом помочь
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.12.2018, 19:49
ТАк по порядку а то я что то не совсем въехал с этими цветами. т.е. нужно посчитать количество чисел кратные 2 или кратные 3 или кратные 5 или все чуть чуть сложнее и посчитать нужно те которые одновременно кратные и 2 и 3 и 5?

Добавлено через 4 минуты
Цитата Сообщение от horbachhvl Посмотреть сообщение
Там кроме цифр, которые повторяются, имеют удаляться числа из следующих условий ...
ага. т.е к примеру число 30. на первом шаге красим в черный. На втором перекрашиваем в красный на 3-ем перекрашиваем в зеленый и на 4-ом перекрашиваем в черный?
А к примеру 21 в результате останется зеленым а 8 красным?

Добавлено через 33 секунды
Цитата Сообщение от horbachhvl Посмотреть сообщение
Там кроме цифр, которые повторяются, имеют удаляться числа из следующих условий ...
ага. т.е к примеру число 30. на первом шаге красим в черный. На втором перекрашиваем в красный на 3-ем перекрашиваем в зеленый и на 4-ом перекрашиваем в черный?
А к примеру 21 в результате останется зеленым а 8 красным?
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16
02.12.2018, 19:56  [ТС]
Например, есть таблица 5 на 2:
1 2
2 4
3 6
4 8
5 10
Результат:

черных 1(Те, что были с начала)
красных 5(те, что делятся на 2)
зеленых 2(те, что делятся на 3)
синих 2 (те, что делятся на 5)
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.12.2018, 20:07
Один момент который не совсем понятен - если оно делится и на 2 и на 3 и на 5 оно будет каким? Синим?
А если делится на 2 и на 3 а на 5 не делится то зеленым?
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16
02.12.2018, 20:28  [ТС]
С начала все черные, потом окрашиваются красным четные числа, потом зеленым, как делятся на 3 (если тики числа есть в списке, которые делятся на два, например 6, то шесть тоже становится зеленым), затем синие, которые делятся на 5 (если среди зеленых и красных есть такие, они тех становятся синие), черные - остальные!
Пример сверху, таблица 5 на 2:
Красные: [2,2,4,4,8] - 5
Зеленые: [3,6] -2
Синие: [5,10] -2
Черные: [1] -1
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.12.2018, 23:17
Калька решения с паскаля. Работает в пределах 1 сек для размерности 1000x1000.
И, как верно отметили выше, создание самой матрицы на самом деле нафиг не нужно.
Хотя, можно, конечно, нагенерировать - и саму таблицу, и списки искомых чисел за один проход, а потом их попересекать...
но вычисление без лишних структур за один проход должно быть самым быстрым.
Python
1
2
3
4
5
6
7
8
9
10
def coloring(rank):
    black, red, green, blue = rank * rank, 0, 0, 0
    for row in range(1,rank+1):
        for column in range(1,rank+1):
            a = row * column
            if a % 5 == 0: blue += 1
            elif (a % 5 != 0)  and (a % 3 == 0):green += 1
            elif (a % 5 != 0)  and (a % 3 != 0) and (a % 2 == 0):red += 1
    black = black - red - green - blue
    return red, green, blue, black

Python
1
2
3
4
5
6
7
8
9
for rank in [10,100,1000]:
    start = time.time()    
    print(
        'RED:{}\nGREEN:{}\nBLUE:{}\nBLACK:{}'.format(   
        *coloring(rank))
    )
    stop = time.time() 
    print("ELAPSED %s sec FOR RANK %s " % (stop-start, rank)) 
    print('*' * 25)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RED:21
GREEN:39
BLUE:36
BLACK:4
ELAPSED 0.0 sec FOR RANK 10
*************************
RED:2133
GREEN:3591
BLUE:3600
BLACK:676
ELAPSED 0.015599966049194336 sec FOR RANK 100
*************************
RED:213333
GREEN:355911
BLUE:360000
BLACK:70756
ELAPSED 0.8568031787872314 sec FOR RANK 1000
0
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
02.12.2018, 23:21
попробуйте Cython

https://ru.wikipedia.org/wiki/Cython
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2018, 23:21
Помогаю со студенческими работами здесь

Ускорить обработку базы
Здравствуйте. Я постараюсь в одной теме уместить "парочку" вопросов. 1с 8.3, КА 1.1 01. Пользователь пытается напечатать расходную...

Снизить трафик или ускорить обработку информации
Привет всем!Пишу клиентскую программу для работы с базой данных MySQL, когда программа соеденяется по локалке то проблем нет все работает...

Как распараллелить обработку массива данных?
Есть массив данных. Есть функция, которая обрабатывает элемент этого массива. Надо распараллелить обработку. Для этого хочу в цикле...

Как правильно организовать обработку данных
Здравствуйте! Ситуация такая, нужно обработать ~9 000 страниц. А после чего сохранить в 24 отдельных файла. Данный процесс будет...

Как правильно использовать обработку данных из бд
Делается проект, встал вопрос - как было бы правильнее сделать обработку данных из БД. Есть таблица, где некоторые поля можно сделать либо...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru