Преобразование данных в NumPy - PullRequest
0 голосов
/ 02 мая 2011
  • Входные данные представляют собой списки 1-мерных массивов, например, x[0] = [ array([1.0,1.0,1.0]), array([2.0,2.0,2.0]), ...]
  • len(x) имеет порядок нескольких тысяч (строк), тогда как len(x[n]) - фиксированное число (столбцы).), но может меняться от запуска к запуску (поэтому я не хочу жестко кодировать количество столбцов).
  • Функция f(x[n][col]) преобразует каждый array в одно число
  • Желаемым результатом является список преобразованных столбцов

Списки предназначены для построения графиков, поэтому они могут представлять собой единую структуру данных.Вот некоторый код для настройки тестовых данных и условного преобразования:

import numpy

# create test data set
def datagen(number):
    return numpy.array([number,number,number])

x=[]
for rows in range(20):
    dataline = [ datagen(n) for n in range(5)]
    x.append(dataline)

#define transformation of array to single number
def f(in_array):
    return in_array.sum()

Желаемый результат - попадайте в тупую, питонскую форму:

[ array([0,0,0,...0]), array([3,3,3,....,3]), array([6,6,6,...,6]), ..etc]

, где в этом случае каждыймассив состоит из 20 элементов (по одному для каждой строки данных) и в списке 5 массивов (по одному для каждого столбца).

Вот мое текущее решение:

trans = []
for dataline in x:
    trans.append([f(a) for a in dataline])

trans = numpy.array(trans)
answer = [ trans[:,col] for col in range(len(x[0])) ]

Не слишкомпотрепанный, но у меня болит голова, и я чувствую, что это можно сделать лучше.???

В реальной жизни f (a) = numpy.sqrt(numpy.vdot(a,a)).

1 Ответ

1 голос
/ 02 мая 2011

Как насчет:

numpy.tile(numpy.arange(1,12).reshape(11,1),20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...