2012-06-25 4 views
3

Я пытаюсь показать корреляцию между двумя отдельными списками. Перед установкой Numpy я проанализировал данные Всемирного банка по значениям ВВП и количеству пользователей Интернета и сохранил их в двух отдельных списках. Вот фрагмент кода. Это только для gdp07. У меня на самом деле больше списков на более долгие годы и другие данные, такие как безработица.Ошибка коррекции ошибок для Python

import numpy as np 

file = open('final_gdpnum.txt', 'r') 
gdp07 = [] 
for line in file: 
    fields = line.strip().split() 
    gdp07.append(fields [0])  

file2 = open('internetnum.txt', 'r') 
netnum07 = [] 
for line in file2: 
    fields2 = line.strip().split() 
    nnetnum07.append(fields2 [0]) 

print np.correlate(gdp07,netnum07,"full") 

Ошибка я получаю это:

Traceback (most recent call last): 
    File "Project3,py", line 83, in ,module. 
    print np.correlate(gdp07, netnum07, "full") 
    File "/usr/lib/python2.6/site-packages/numpy/core/numeric.py", line 645, in correlate 
    return multiarray.correlate2(a,v,mode)) 
ValueError: data type must provide an itemsize 

Просто для записи, я использую Cygwin с Python 2.6 на компьютере Windows. Я использую только Numpy вместе со своими зависимостями и другими частями его сборки (gcc-компилятор). Любая помощь будет большой. Thx

ответ

3

Возможно, это ошибка при попытке ввода данных в виде строки, так как в соответствии с питоном DOCS полосы() возвращает строку

http://docs.python.org/library/stdtypes.html

Попробуйте анализировать данные для любого типа вы хотите

Как вы можете видеть здесь

In [14]:np.correlate(["3", "2","1"], [0, 1, 0.5]) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
/home/dog/<ipython-input-14-a0b588b9af44> in <module>() 
----> 1 np.correlate(["3", "2","1"], [0, 1, 0.5]) 

/usr/lib64/python2.7/site-packages/numpy/core/numeric.pyc in correlate(a, v, mode, old_behavior) 
    643   return multiarray.correlate(a,v,mode) 
    644  else: 
--> 645   return multiarray.correlate2(a,v,mode) 
    646 
    647 def convolve(a,v,mode='full'): 

ValueError: data type must provide an itemsize 

попробовать разборе значения

In [15]: np.correlate([int("3"), int("2"),int("1")], [0, 1, 0.5]) 
Out[15]: array([ 2.5]) 



import numpy as np 

file = open('final_gdpnum.txt', 'r') 
gdp07 = [] 
for line in file: 
    fields = line.strip().split() 
    gdp07.append(int(fields [0]))  

file2 = open('internetnum.txt', 'r') 
netnum07 = [] 
for line in file2: 
    fields2 = line.strip().split() 
    nnetnum07.append(int(fields2 [0])) 

print np.correlate(gdp07,netnum07,"full") 

вашей другая ошибка проблема характера окончания я надеюсь, что это работает, так как я не думаю, что я могу воспроизвести его, так как у меня есть коробка Линукса, который поддерживает UTF-8 по умолчанию. я пошел по IPython помощи (кодеки) документация http://code.google.com/edu/languages/google-python-class/dict-files.html

import codecs 

f = codecs.open(file, "r", codecs.BOM_UTF8) 
for line in f: 
    fields = line.strip().split() 
    gdp07.append(int(fields [0])) 
+0

Я думаю, что вы прав насчет вывода строки. Сначала я попробовал ваше предложение. Но это дает мне другую ошибку значения, говоря, что это недопустимый литерал. "ValueError: Недопустимый литерал для int() с базой 10: '\ xef \ xbb \ xbf553,771' Я попытался вынуть strip() и оставил только split(), но моя оригинальная проблема« типа данных должна предоставить – Nopiforyou

+0

Я думаю, вы можете попробовать поплавок или дать нам небольшой фрагмент данных. – user1462442

+0

Ха-ха, да, я тоже пытался с поплавком. Это была та же проблема с int ... :( Данные, как это представленный прямо сейчас ['11 .1 ',' 5.9 ',' 3 ', '22 .7', '13 .7 ',' 3.6 ',' 3.7 '] Конечно, есть больше списков, и они намного больше – Nopiforyou

0

Попробуйте бросить данные для типа поплавка. меня устраивает!

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