2016-02-21 4 views
0

Я хочу сделать некоторую математику по моим данным и застрять с ней. Я читаю строковые списки из файлов csv и могу их нарисовать до сих пор. Теперь я пытаюсь преобразовать строковые списки в списки с плавающей точкой, так как хочу сделать некоторую математику в элементах списка и создавать новые списки и строить их.Чтение списка из CSV и конвертирование в список поплавков

import numpy as np 
import math 
import matplotlib.pyplot as plt 

with open("testlog.csv") as f: 
    data = f.read() 

data = data.split('\n') 

time = [row.split(',')[0] for row in data] 
gyro_x_lsb = [row.split(',')[1] for row in data] 
gyro_y = [row.split(',')[2] for row in data] 
gyro_z = [row.split(',')[3] for row in data] 
accel_x = [row.split(',')[4] for row in data] 
accel_y = [row.split(',')[5] for row in data] 
accel_z = [row.split(',')[6] for row in data] 
comp_x = [row.split(',')[7] for row in data] 
comp_y = [row.split(',')[8] for row in data] 
comp_z = [row.split(',')[9] for row in data] 
temp = [row.split(',')[10] for row in data] 

gyro_x_lsb = float(gyro_x_lsb)# make floats in a new list 
gyro_x_dps = [gyro_x_lsb/(32768*2000) for gyro_x_dps_f in gyro_x_lsb] 

fig = plt.figure() 

ax1 = fig.add_subplot(211) 
ax1.set_title("Gyro X AR [LSB]") 
ax1.set_xlabel('Time[ms]') 
ax1.set_ylabel('AR [LSB]') 
ax1.plot(time,gyro_x_lsb, c='r', label='X') 
leg = ax1.legend() 

ax2 = fig.add_subplot(212) 
ax2.set_title("MPU9250_test_Accel") 
ax2.set_xlabel('Time[ms]') 
ax2.set_ylabel('Acceleration') 
ax2.plot(time,accel_x, c='r', label='Accel_X') 
leg = ax2.legend() 

plt.show() 

Я пытаюсь рассчитать каждый элемент в «gyro_x_lsb»/32768 * 2000. Но это не сработает. Я тоже попробовал карту.

Заранее спасибо ... TMP36

BTW: Я использую Анаконда 3 (2.5.0) с Python 3.5 Я новичок в Python и на этот форум.

+0

Возможного дубликат [читать значения из CSV-файлов и конвертировать их плавать массивы] (http://stackoverflow.com/questions/14493026/read-values-from-csv-file-and-convert- them-to-float-arrays) – ebarr

ответ

0

List comprehensions многое сделает для вас.

Как:

gyro_x_lsb_sum = sum(float(item) for item in gyro_x_lsb) 

Здесь я использую a generator expression, который является один и тот же синтаксис, что список понимания, но более высокую производительность в этом случае.

Надеюсь, это поможет.

PS. Рассмотрите возможность использования модуля Python csv для чтения файлов CSV.

0

Спасибо за подсказки с модулем CSV. Это теперь прочитало мои данные как кортеж. Это тоже было ново для меня, и я нашел возможность сделать некоторые математические данные. Вот код, который теперь работает для меня, может быть, не идеальный, но я доволен.

import csv 
import matplotlib.pyplot as plt 

with open("testlog.csv") as data: 
    #reader = csv.reader(data) #read columns as strings 
    reader = csv.reader(data, quoting=csv.QUOTE_NONNUMERIC) #read columns as numbers 
    time, gyro_x, gyro_y, gyro_z, accel_x, accel_y, accel_z, comp_x, comp_y, comp_z, temp = zip(*reader) 

#gyro_x_dps = gyro_x 

def gyro_x_dps(gyro_x): 
    return tuple([e/65536000 for e in gyro_x]) 

fig = plt.figure() 

ax1 = fig.add_subplot(211) 
ax1.set_title("Gyro X AR [LSB]") 
ax1.set_xlabel('Time[ms]') 
ax1.set_ylabel('AR [LSB]') 
ax1.plot(time,gyro_x, c='r', label='X') 
leg = ax1.legend() 

ax2 = fig.add_subplot(212) 
ax2.set_title("Gyro X AR [dps]") 
ax2.set_xlabel('Time[ms]') 
ax2.set_ylabel('AR [dps]') 
ax2.plot(time,gyro_x_dps(gyro_x), c='r', label='X') 
leg = ax2.legend() 

plt.show() 
+0

Можете ли вы пометить мой ответ как полезный? – totoro

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