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
