Operazione con due liste
Inviato: venerdì 13 maggio 2016, 21:13
CIao a tutti ragazzi ho un problemino tecnico.
Il mio programma esegue un calcolo fra gli elementi presenti all'interno due file.
Vi spiego con un esempio il mio problema:
ho due liste identiche di nomi files (nome_a = file_a):
nome_a nome_a
nome_b nome_b
nome_c nome_c
prendo nome_a ed eseguo il calcolo:
nome_a vs nome_a
nome_a vs nome_b
nome_a vs nome_c
poi prendo:
nome_b vs nome_a
nome_b vs nome_b
nome_c vs nome_c
Il mio problema è che non voglio che il nome_a e nome_b vengano confrontati una seconda volta perchè A vs B == B vs A per cui mi basta calcolarlo una sola volta, questo ovviamente per ogni nome che ho.
Il mio codice è questo:
Come posso fare per risolvere il problema? C'è un modo per migliorare l'algoritmo oppure con bash posso risolvere il problema?
Grazie mille
Il mio programma esegue un calcolo fra gli elementi presenti all'interno due file.
Vi spiego con un esempio il mio problema:
ho due liste identiche di nomi files (nome_a = file_a):
nome_a nome_a
nome_b nome_b
nome_c nome_c
prendo nome_a ed eseguo il calcolo:
nome_a vs nome_a
nome_a vs nome_b
nome_a vs nome_c
poi prendo:
nome_b vs nome_a
nome_b vs nome_b
nome_c vs nome_c
Il mio problema è che non voglio che il nome_a e nome_b vengano confrontati una seconda volta perchè A vs B == B vs A per cui mi basta calcolarlo una sola volta, questo ovviamente per ogni nome che ho.
Il mio codice è questo:
Codice: Seleziona tutto
#! /usr/bin/python
import csv
import numpy
numpy.seterr(divide='ignore', invalid='ignore')
bacteria = csv.reader(open('bacteria_names.csv', 'rb'))
name = []
bacteria_next = csv.reader(open('bacteria_names_next.csv', 'rb'))
name_next = []
for row in bacteria:
name.append(row[0])
for row_next in bacteria_next:
name_next.append(row_next[0])
ofile = open('/home/daniele/Documents/Universita/Magistrale/Modelli_di_Calcolo_naturale/Project/NEW_ANALISYS/Bacteria/heatmap_bacteria.csv', "wb")
for n in name:
data_1 = csv.reader(open(n+'_min_avg_max.csv', 'rb'), delimiter="\t")
column1_data_1, column2_data_1, column3_data_1 = [], [], []
for row in data_1:
column1_data_1.append(row[1])
column2_data_1.append(row[2])
column3_data_1.append(row[3])
column_min_data_1 = map(float, column1_data_1)
column_avg_data_1 = map(float, column2_data_1)
column_max_data_1 = map(float, column3_data_1)
for j in name_next:
data_2 = csv.reader(open(j+'_min_avg_max.csv', 'rb'), delimiter="\t")
column1_data_2, column2_data_2, column3_data_2 = [], [], []
for row_next in data_2:
column1_data_2.append(row_next[1])
column2_data_2.append(row_next[2])
column3_data_2.append(row_next[3])
column_min_data_2 = map(float, column1_data_2)
column_avg_data_2 = map(float, column2_data_2)
column_max_data_2 = map(float, column3_data_2)
print n + ' vs ' + j
min_heat = numpy.asarray(numpy.corrcoef(column_min_data_1, column_min_data_2))[0, 1]
avg_heat = numpy.asarray(numpy.corrcoef(column_avg_data_1, column_avg_data_2))[0, 1]
max_heat = numpy.asarray(numpy.corrcoef(column_max_data_1, column_max_data_2))[0, 1]
writer = csv.writer(ofile, delimiter='\t')
writer.writerow([n+' vs '+j, min_heat, avg_heat, max_heat])
ofile.close()
Grazie mille