2009-07-23 2 views
0

Я использую алгоритм, описанный here, чтобы соответствовать гауссовским кривым колокола к моим данным.Fit алгоритм не принимает мои данные

Если я произвожу мой массив данных с:

x=linspace(1.,100.,100) 
data= 17*exp(-((x-10)/3)**2) 

все работает отлично.

Но если я читать данные из текстового файла, используя

file = open("d:\\test7.txt") 
arr=[] 
data=[] 


def column(matrix,i): 
    return [row[i] for row in matrix] 

for line in file.readlines(): 
    numbers=map(float, line.split()) 
    arr.append(numbers) 

data = column(arr,300) 
x=linspace(1.,115.,115) 

Я получаю сообщение об ошибке:

Traceback (most recent call last): 
File "readmatrix.py", line 60, in <module> fit(f, [mu, sigma, height], data) 
File "readmatrix.py", line 42, in fit if x is None: x = arange(y.shape[0]) 
AttributeError: 'list' object has no attribute 'shape' 

Насколько я могу видеть, значения, включенные в данные являются правильными, это выглядит так:

[0.108032, 0.86181600000000003, 1.386169, 3.2790530000000002, ... ] 

У кого-то есть мнение, что я делаю неправильно?

Спасибо!

+3

@Dzz: вы даже не включаете соответствующие части исходного кода. Строка 42 - это ошибка, из-за которой вы используете «y.shape [0]», а y - тип списка, который не имеет атрибута shape. Вам нужно будет указать больше источников, чтобы мы могли найти ошибку. –

+0

Извините, я надеялся уменьшить количество текста в сообщении, связавшись с кодом. – Dzz

ответ

4

Функция fit ожидает, что данные будут представлять собой массив numpy (который имеет атрибут shape), а не список (а это не так), следовательно, AttributeError.

Преобразование данных:

def column(matrix,i): 
    return numpy.asarray([row[i] for row in matrix]) 
+0

Почти! Большое спасибо за подсказку! – Dzz

4

Решение balpha не является правильным; решение - просто преобразовать мой список в массив numpy через numpy.array.

Спасибо за подсказку!

+1

В каком смысле это неверно? (Я просто использовал документацию numpy, согласно которой asarray должен работать, у меня нет установленного numpy). Какую ошибку вы получаете? – balpha

+0

Это так, но команда arr.append (numbers) снова делает список из numpy.array. – Dzz

+0

arr.append (numbers) называется * before * column(), поэтому это не должно меняться. Во всяком случае, пока это работает ... :-) – balpha

Смежные вопросы