LINUX.ORG.RU
ФорумJob

Шабашка на Python+NumPy : 15$ (вычислить медиану столбца CSV-таблицы)

 


0

1

Я не успеваю разобраться с вычислением нормы по столбцу 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))) )
, где a_formats определяется процедурой detect (её здесь не привожу). Например, a_formats = [«int64», «int64», ..., «|U8»]

Надо написать функцию:

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()
P.S. Ещё раз: Задача состоит в вычитании из заданного набора столбцов (a_cols1) средних значений этих столбцов.
Можете говорить сразу здесь, что беретесь за задачу, чтобы не дублировать заявки.
Если напишете normalize() как двухпроходный алгоритм (fseek(0)), тоже нормально. На первом проходе - подсчет средних значений, на втором - вычитание. Чтобы не подгружать массив в память целиком.

★★★★★

Последнее исправление: pacify (всего исправлений: 4)

Ответ на: комментарий от HomeEdition

Что-то я совсем туплю. Решил задачу «в лоб» за пять минут. :)

Вопрос закрыт.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.