Я не успеваю разобраться с вычислением нормы по столбцу CSV-файла средствами Numerical Python (python-numpy). Если кто-то может решить эту задачу - я заплачу 15$ переводом на банковскую карту или Webmoney.
У меня следующий код читает таблицу:
def read_(filename, a_formats):
f_i = open(filename,"r")
reader = csv.reader(f_i, dialect=csv.excel, delimiter=DELIM, quotechar=QUOTE, quoting=csv.QUOTE_MINIMAL)
# np.genfromtxt() has incorrect quote read
a = [[col for col in row] for row in reader]
n = len(a[0])
return np.rec.fromrecords(a, formats=a_formats, names = list(map(str,range(n))) )
Надо написать функцию:
def normalize_(arr1, a_cols1, f_o):
writer = csv.writer(f_o, dialect=csv.excel, delimiter=DELIM, quotechar=QUOTE, quoting=csv.QUOTE_MINIMAL)
...
arr1_new # числовые столбцы нормализованы: a_j = a_j - mean(a_j)
for row in range(arr1_new):
writer.writerow(row)
...
arr1 = read_(filename_i1, formats1)
a_cols1 = ["1","2"] # колонки нумеруются с единицы: 1,2,...
# see http://stackoverflow.com/questions/1170214/pythons-csv-writer-produces-wrong-line-terminator
if sys.version_info >= (3,0,0):
f_o = open(filename_o, "w", encoding=ENCODING, newline="") # for write
else:
f_o = open(filename_o, "wb")
normalize_(arr1, a_cols1, f_o)
f_o.close()
Можете говорить сразу здесь, что беретесь за задачу, чтобы не дублировать заявки.
Если напишете normalize() как двухпроходный алгоритм (fseek(0)), тоже нормально. На первом проходе - подсчет средних значений, на втором - вычитание. Чтобы не подгружать массив в память целиком.