- Входные данные представляют собой списки 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))
.