2013-08-19 3 views
0

Я новичок в программировании и имею некоторые проблемы, упрощающие мой код. У меня нет проблем с предыдущими частями, просто нужно знать, как я могу упростить этот код. Я бы хотел, чтобы приведенный ниже код также отображался на 12,18,20,27 и 28, вместо «11». Буду признателен за любую помощь!Как я могу упростить этот ужасный код?

simrecno1inds11 = nonzero(datasim11[:,1]==no1)[0] 
simrecno2inds11 = nonzero(datasim11[:,1]==no2)[0] 
simrecno3inds11 = nonzero(datasim11[:,1]==no3)[0] 
simrecno4inds11 = nonzero(datasim11[:,1]==no4)[0] 
simrecno5inds11 = nonzero(datasim11[:,1]==no5)[0] 

simrecno7inds11 = nonzero(datasim11[:,1]==no7)[0] 
simrecno8inds11 = nonzero(datasim11[:,1]==no8)[0] 
simrecno9inds11 = nonzero(datasim11[:,1]==no9)[0] 
simrecno10inds11 = nonzero(datasim11[:,1]==no10)[0] 
simrecno11inds11 = nonzero(datasim11[:,1]==no11)[0] 
simrecno12inds11 = nonzero(datasim11[:,1]==no12)[0] 
simrecno13inds11 = nonzero(datasim11[:,1]==no13)[0] 
simrecno14inds11 = nonzero(datasim11[:,1]==no14)[0] 
simrecno15inds11 = nonzero(datasim11[:,1]==no15)[0] 
simrecno16inds11 = nonzero(datasim11[:,1]==no16)[0] 
simrecno17inds11 = nonzero(datasim11[:,1]==no17)[0] 
simrecno18inds11 = nonzero(datasim11[:,1]==no18)[0] 
simrecno19inds11 = nonzero(datasim11[:,1]==no19)[0] 
simrecno20inds11 = nonzero(datasim11[:,1]==no20)[0] 
simrecno21inds11 = nonzero(datasim11[:,1]==no21)[0] 
simrecno22inds11 = nonzero(datasim11[:,1]==no22)[0] 
simrecno23inds11 = nonzero(datasim11[:,1]==no23)[0] 
simrecno24inds11 = nonzero(datasim11[:,1]==no24)[0] 
simrecno25inds11 = nonzero(datasim11[:,1]==no25)[0] 
simrecno26inds11 = nonzero(datasim11[:,1]==no26)[0] 
simrecno27inds11 = nonzero(datasim11[:,1]==no27)[0] 
simrecno28inds11 = nonzero(datasim11[:,1]==no28)[0] 
simrecno29inds11 = nonzero(datasim11[:,1]==no29)[0] 
simrecno30inds11 = nonzero(datasim11[:,1]==no30)[0] 

recno1inds11 = nonzero(data11[:,1]==no1)[0] 
recno2inds11 = nonzero(data11[:,1]==no2)[0] 
recno3inds11 = nonzero(data11[:,1]==no3)[0] 
recno4inds11 = nonzero(data11[:,1]==no4)[0] 
recno5inds11 = nonzero(data11[:,1]==no5)[0] 

recno7inds11 = nonzero(data11[:,1]==no7)[0] 
recno8inds11 = nonzero(data11[:,1]==no8)[0] 
recno9inds11 = nonzero(data11[:,1]==no9)[0] 
recno10inds11 = nonzero(data11[:,1]==no10)[0] 
recno11inds11 = nonzero(data11[:,1]==no11)[0] 
recno12inds11 = nonzero(data11[:,1]==no12)[0] 
recno13inds11 = nonzero(data11[:,1]==no13)[0] 
recno14inds11 = nonzero(data11[:,1]==no14)[0] 
recno15inds11 = nonzero(data11[:,1]==no15)[0] 
recno16inds11 = nonzero(data11[:,1]==no16)[0] 
recno17inds11 = nonzero(data11[:,1]==no17)[0] 
recno18inds11 = nonzero(data11[:,1]==no18)[0] 
recno19inds11 = nonzero(data11[:,1]==no19)[0] 
recno20inds11 = nonzero(data11[:,1]==no20)[0] 
recno21inds11 = nonzero(data11[:,1]==no21)[0] 
recno22inds11 = nonzero(data11[:,1]==no22)[0] 
recno23inds11 = nonzero(data11[:,1]==no23)[0] 
recno24inds11 = nonzero(data11[:,1]==no24)[0] 
recno25inds11 = nonzero(data11[:,1]==no25)[0] 
recno26inds11 = nonzero(data11[:,1]==no26)[0] 
recno27inds11 = nonzero(data11[:,1]==no27)[0] 
recno28inds11 = nonzero(data11[:,1]==no28)[0] 
recno29inds11 = nonzero(data11[:,1]==no29)[0] 
recno30inds11 = nonzero(data11[:,1]==no30)[0] 
+0

Что делает '[:, 1]' do? – Hyperboreus

+0

Он срезает всю первую строку массива numpy. – Brionius

+0

@Brionius Спасибо. – Hyperboreus

ответ

5

Независимо no1 - no30, вы должны поместить его в объект последовательности, как list, затем цикл по этому объекту последовательности для получения выходного сигнала, который вы будете помещать в объект последовательности (в в этом случае я думаю, что лучше всего будет dict).

nos = [no1, no2, ..., no30] 
simrecno_inds11 = {} 
recno_inds11 = {} 
exclude_nums = [6] 
for k, no in enumerate(nos): 
    if k in exclude_nums: 
     continue 
    simrecno_inds11[k] = nonzero(datasim11[:,1]==no)[0] 
    recno28inds11[k] = nonzero(data11[:,1]==no)[0] 

Теперь вместо доступа simrecno17inds11, вы получите доступ к simrecno_inds11[17], и так далее.

+0

Изменен вывод из списка ==> dict, поскольку индексы не являются последовательными. – Brionius

0

Кажется, что ваши переменные «simrecnoXXindsYY» могут быть представлены в 2D-массиве simrec[n, i] (n-> no, i-> inds). Точно так же «recnoXXindsYY» может стать только rec[n,i]. Наконец, «noXX» может быть 1D-массивом no[n]. Так что ваши задания имеют вид:

simrec[n, i] = nonzero(datasim[i][:,1]==no[n])[0] 
rec[n, i] = nonzero(data[i][:,1]==no[n])[0] 

Таким образом, вы должны были бы цикла для всех возможных значений n (NOS) и i (индексы).

indexes = [11, 12, 18, 20, 27, 28] 
nos = range(1,31) 

for i in index: 
    for n in nos: 
     simrec[n, i] = nonzero(datasim[i][:,1]==no[n])[0] 
     rec[n, i] = nonzero(data[i][:,1]==no[n])[0] 
+0

Это дает мне ошибку invalidindex для строки simrec [n, i] = nonzero (datasim [i] [:, 1] == no [n]) [0] – boson

+0

@boson, вам нужно отлаживать, вставлять 'print n' и 'print i' в цикле и посмотреть, почему индекс не связан. – elyase

+0

Это только печать 1 и 11. – boson