2016-02-29 80 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 

似乎是工作。當參考時間超出可用範圍時,我將不得不添加錯誤消息。雖然會喜歡一些建設性的批評。你認爲任何命令都會比我使用的更好/更快?

相關問題