2013-03-19 3 views
2

Я пытаюсь читать 3 столбца, используя numpy.loadtext, но получаю ошибку ValueError: установка элемента массива с последовательностью.Готовые столбцы Numpy/Matplotlib

Образец данных:

0.5  0 -22 
0.5  0 -21 
0.5  0 -22 
0.5  0 -21 

колонке 1 = расстояние, при этом увеличивается от 0,5 до 6,5 с помощью 15 выборок данных в каждом расстоянии Колонка 2 = угол, это увеличивает 45deg каждый раз возвращает расстояние до 0,5 колонке 3 = данные измеряются (ый RSSI), которая уменьшается приблизительно от -20 до -70

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

import numpy as np 

r, theta, RSSI, null = np.loadtxt("bot1.txt", unpack=True) 

Я буду усреднять выборочный RSSI при каждой комбинации расстояний/углов, а затем я надеюсь построить данные в виде 3D-поля. Пока у меня еще не получилось.

Любые мысли о том, почему np.loadtxt не работает?

ответ

5

Помимо того факта, что вы распаковываете 3 столбца на четыре переменные, я не вижу никаких проблем. На самом деле, это работает с моей NumPy 1.6.2 с:

r, theta, RSSI = np.loadtxt("bot1.txt", unpack=True) # 3 columns => 3 variables 

Это также можно сделать то же самое в чистом Python, чтобы увидеть, если что-то еще вызывает проблемы (например, ошибка в файл):

import numpy 

def loadtxt_unpack(file_name): 
    ''' 
    Reads a file with exactly three numerical (real-valued) columns. 
    Returns each column independently. 
    Lines with only spaces (or empty lines) are skipped. 
    ''' 

    all_elmts = [] 

    with open(file_name) as input_file: 
     for line in input_file: 

      if line.isspace(): # Empty lines are skipped (there can be some at the end, etc.) 
       continue 

      try: 
       values = map(float, line.split()) 
      except: 
       print "Error at line:" 
       print line 
       raise 

      assert len(values) == 3, "Wrong number of values in line: {}".format(line) 

      all_elmts.append(values) 

    return numpy.array(all_elmts).T 

r, theta, RSSI = loadtxt_unpack('bot1.txt') 

В случае возникновения проблем с файлом (если непустая линия не может быть истолкована как три поплавков), проблемная строка печатается и исключение.

+0

А, я на самом деле положил нулевое значение, чтобы проверить и увидеть, возможно, что-то произошло после значения rssi, которое вызывало что-то смешное. Я думаю, что это может быть проблема с размером файла. –

+0

Вы абсолютно уверены, что файл содержит только три столбца в каждой строке, которые представляют действительные числа? Я добавил тестовую программу в свой ответ, который сообщает о проблемах, если есть строка, которая не соответствует вашим ожиданиям. – EOL

+0

PS: Насколько велик ваш входной файл? Я прочитал файлы с миллионами строк с 'loadtxt()', если я правильно помню; Я был бы удивлен, если бы размер файла был проблемой. – EOL

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