2016-02-29 42 views
2

我正在编写代码来分析树莓派上的加速度计数据。传感器数据输出到单个txt文件,并以\ t分隔列。我使用numpy.loadtxt导入了文本文件并将其解压到单独的数组中。我可以在阵列上执行诸如trapz和cumtrapz之类的操作。我需要找到一个numpy数组中的值的位置,并使用它来指向另一个numpy数组的相同位置的值

该数据将与另一个将输出事件特定时间的传感器结合使用。我想花时间,从我的传感器中找到最接近的记录时间,并将其与其他阵列的值相对应。

我尝试使用numpy.where与我知道的是在列表中,并得到的输出的特定时间值“(阵列([],D型细胞= INT32),)”

下面是代码我跑了。我确信我至少有一件事被滥用。我仍然在Python非常初学者和一般的编码...

import logging 
import sys 
import numpy as np 
from scipy import integrate 
x,y,z,t=np.loadtxt('a.txt', dtype={'names':['x','y','z','t'], 
'formats':['f4','f4','f4','f4']},unpack='true') 
p = integrate.trapz(integrate.cumtrapz(x, t, initial=0), t) 
ti = np.where(x==1.5670002) 
print ti 
print p 

从输出全是

(array([], dtype=int32),) 
0.0114166 

所以我从t中的值搜索X。它现在正在输出 (array([101]),)

如何从另一个数组中打印相应的数字?

+1

很好!你介意看看你的“x,y,z,t”是在阅读之后吗?不需要成为整个文件,仅仅前几个条目(和它们的形状)就足够了。 – MSeifert

+0

当我告诉它打印t的前几个值是[0.2712 0.28029999 0.28920001 0.29800001 0.30680001 0.3163 0.32530001 0.3344 0.3441 0.35280001 0.36129999 0.37079999 – Richard

+0

只要打印x [ti [0]]打印相应的x值if ti输出为(array([101]),) – Richard

回答

0

这里是我的解决方案:

import logging 
import sys 
import numpy as np 
from scipy import integrate 
x,y,z,t=np.loadtxt('a.txt', dtype={'names':['x','y','z','t'], 
'formats':['f4','f4','f4','f4']},unpack='true') 
p = integrate.cumtrapz(integrate.cumtrapz(x, t, initial=0), t) 
t0=input("What is reference time?") 
ti = np.where(t>=t0)[0][0] 
if t[ti]-t0 <= t0-t[ti-1]: 
    t1 = ti 
else: 
    t1 = ti-1 

print ('closest time was {0:0.4f}\ndisplacement at that time was {1:0.4f}' .format(t[t1],p[t1])) 

输出

closest time was 1.1991 
displacement at that time was 0.0100 

似乎是工作。当参考时间超出可用范围时,我将不得不添加错误消息。虽然会喜欢一些建设性的批评。你认为任何命令都会比我使用的更好/更快?

相关问题