Мне нужно, чтобы вложенные циклы моей программы работали проще, так как время работы максимально - PullRequest
0 голосов
/ 30 января 2019

Я учусь на вложенных циклах в Python.

Задача:

Ниже я написал свой код.Я хочу упростить мой код, поскольку, когда я запускаю код, для получения результата требуется так много времени.

Мой код:

У меня есть список, содержащий 1000 значений:

Brake_index_values = [ 44990678,  44990679,  44990680,  44990681,  44990682,  44990683,
             44997076,  44990684,  44997077,  44990685,
            ...
             44960673,   8195083,   8979525, 100107546,  11089058,  43040161,
             43059162, 100100533,  10180192,  10036189]

Я храню элемент № 1 в другом списке

original_top_brake_index = [Brake_index_values[0]]

Я создал временный список с именем temp и массив numpy для итерации по циклу:

temp =[]
arr = np.arange(0,1000,1)

Циклическая операция:

for i in range(1, len(Brake_index_values)):
    if top_15_brake <= 15:
        a1 = Brake_index_values[i]
        #a2 = Brake_index_values[j]
        a3 = arr[:i]
        for j in a3:
            a2 = range(Brake_index_values[j] - 30000, Brake_index_values[j] + 30000)
            if a1 in a2:
                pass
            else:
                temp.append(a1)
        if len(temp)== len(a3):
            original_top_brake_index.append(a1)
            top_15_brake += 1
            del temp[:]
        else:
            del temp[:]
            continue

Что я сделал в коде:

Я сравниваю элемент Brake_index_values[1], доступный в диапазоне от 30000 до и после элемента Brake_index_values[0], то естьrange(Brake_index_values[0]-30000, Brake_index_values[0]+30000) `.

Если между диапазоном имеется Brake_index_values[1], я должен игнорировать этот элемент и перейти к следующему элементу Brake_index_values[2] и следовать тому же процессу, что и ранее для Brake_index_values[0] & Brake_index_values[1]

Если оно доступно, сохраните значение в original_top_brake_index тщательной append операции.

Результат, который я получаю:

Работает, но работаетНа завершение операции уходит так много времени, а иногда отображается MemoryError.

Требование:

Я просто хочу, чтобы мой код работал проще и эффективнее с простыми операциями.

Запрос:

Я не хороший кодер, в любом случае, я уверен, что будет какой-то простой способ сделатьвышеуказанный процесс.Пожалуйста, пролите свет, чтобы избежать этой проблемы или нового подхода.

1 Ответ

0 голосов
/ 30 января 2019

Вы можете взглянуть на numpy.where
(https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.where.html)
, чтобы решить эту проблему. Ваш код будет выглядеть следующим образом:

BIV = np.array(Brake_index_values) # shortening for convenience
ref_val = BIV[0]
req_indicies, = np.where((BIV < ref_val-3e4) | (BIV > ref_val+3e4)) 
req_array = BIV[req_indicies]

Это должно дать вам массивиз всех значений, передающих условие, которое вы можете использовать в дальнейшем.

...