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

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

01.12.2018, 22:55. Показов 1128. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2018, 22:55
Ответы с готовыми решениями:

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

Задача на исполнитель и обработку чисел
Здравствуйте. Есть задача. Есть некоторый исполнитель, который обрабатывает числа. Он может +2 и...

Выполнить обработку элементов прямоугольной матрицы
Ребят последнее задание помогите кто-нибудь пожалуйсто_) Выполнить обработку элементов...

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

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

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

Зачем удалять пересечение списков чисел тупым перебором, когда есть set?
0
2054 / 1529 / 167
Регистрация: 14.12.2014
Сообщений: 13,326
02.12.2018, 02:42 3
Цитата Сообщение от horbachhvl Посмотреть сообщение
но когда я создаю таблицу большую, например 900 строке и 900 столбцов,
Зачем ее вообще создавать для этой задачи?
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16
02.12.2018, 19:43  [ТС] 4
ЗАДАЧА: Таблицей умножения назовем таблицу размера 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
2054 / 1529 / 167
Регистрация: 14.12.2014
Сообщений: 13,326
02.12.2018, 19:49 5
ТАк по порядку а то я что то не совсем въехал с этими цветами. т.е. нужно посчитать количество чисел кратные 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  [ТС] 6
Например, есть таблица 5 на 2:
1 2
2 4
3 6
4 8
5 10
Результат:

черных 1(Те, что были с начала)
красных 5(те, что делятся на 2)
зеленых 2(те, что делятся на 3)
синих 2 (те, что делятся на 5)
0
2054 / 1529 / 167
Регистрация: 14.12.2014
Сообщений: 13,326
02.12.2018, 20:07 7
Один момент который не совсем понятен - если оно делится и на 2 и на 3 и на 5 оно будет каким? Синим?
А если делится на 2 и на 3 а на 5 не делится то зеленым?
0
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 16
02.12.2018, 20:28  [ТС] 8
С начала все черные, потом окрашиваются красным четные числа, потом зеленым, как делятся на 3 (если тики числа есть в списке, которые делятся на два, например 6, то шесть тоже становится зеленым), затем синие, которые делятся на 5 (если среди зеленых и красных есть такие, они тех становятся синие), черные - остальные!
Пример сверху, таблица 5 на 2:
Красные: [2,2,4,4,8] - 5
Зеленые: [3,6] -2
Синие: [5,10] -2
Черные: [1] -1
0
Эксперт Python
5076 / 3612 / 1144
Регистрация: 28.10.2013
Сообщений: 9,118
Записей в блоге: 1
02.12.2018, 23:17 9
Калька решения с паскаля. Работает в пределах 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)

Код
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
27 / 19 / 10
Регистрация: 10.02.2016
Сообщений: 236
02.12.2018, 23:21 10
попробуйте Cython

https://ru.wikipedia.org/wiki/Cython
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2018, 23:21

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

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

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

Как упростить имеющуюся обработку по загрузке данных
Есть обработка по загрузке данных из табличного документа (управляемые формы) . Обработка...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.