2017-10-26 20 views
0

저는 보행기와 걷는 시간에 대한 x 및 y 좌표를 포함하는 3 열 텍스트 파일을 읽는 python 스크립트를 가지고 있습니다.(x, y) 좌표에서 이동 한 거리 찾기

I이 데이터를 판독하고 다음 코드와 같이 NumPy와 배열에 할당 가지고

5907364.2371 -447070.881709 2193094 
5907338.306978 -447058.019176 2193116 
5907317.260891 -447042.192668 2193130 

I :

import numpy as np 
import matplotlib.pyplot as plt 

data = np.loadtxt("info.txt", delimiter = ',') 

x = data[:,0] 
y = data[:,1] 
t = data[:,2] 

파일은 포맷 (X, Y, t) 아래 이제 보행 보조기가 시간의 함수로 여행 한 거리를 찾고 싶습니다. 내가 생각하는 한 가지 방법은 x 좌표의 차이와 y 좌표의 모든 차이를 루프에서 합산하는 것입니다. 이것은 매우 길어진 방법이지만, 수치 적 통합 유형으로 해결 될 수 있다고 생각합니다. 누구든지 제가 할 수있는 것에 대한 아이디어가 있습니까?

+0

몇 줄의 텍스트 파일을 공유 할 수 있습니까? –

+0

몇 가지 데이터를 보여주십시오. – skrubber

+0

프로그래밍 문제보다는 수학 문제와 더 비슷합니다. – nyvokub

답변

3

"길을 따라"거리를 계산하려면 먼저 각 단계의 거리를 알아야합니다.

이것은 구성 요소별로 인덱싱 dx = x[1:]-x[:-1]을 통해 얻을 수 있습니다. 단계 당 거리는 "dx ** 2 + dy ** 2의 제곱근"입니다.이 배열의 길이는 단계 수에 대해 하나의 간격이 짧기 때문에 1만큼 작습니다. 이것은 처음 데이터에 거리 "0"을 할당하여 완료 할 수 있습니다. 아래의 "연결"행의 역할입니다.

여기에는 수치 적분이 없지만 누적 합계가 있습니다. 수치 적 통합을 수행하려면 운동 방정식이 필요합니다 (예 :).

추가 변경 : 몇 줄을 저장하려면 unpack=True 인수와 함께 np.loadtxt을 사용합니다.

import numpy as np 
import matplotlib.pyplot as plt 

x, y, t = np.loadtxt("info.txt", unpack=True) 

dx = x[1:]-x[:-1] 
dy = y[1:]-y[:-1] 

step_size = np.sqrt(dx**2+dy**2) 

cumulative_distance = np.concatenate(([0], np.cumsum(step_size))) 

plt.plot(t, cumulative_distance) 

plt.show() 
0

일반적으로 걷기 거리를 얻으려면 더 작은 거리를 합산하십시오. 귀하의 워커는 아마도 그리드 (x의 한 걸음, y의 한 걸음)가 아니라 대각선 (피타고라스 정리를 생각하십시오)을 걷는 것일 것입니다 ...

이렇게 파이썬에서는 ...

distanceWalked = 0 
for x_y_point in listOfPoints: 
    distanceWalked = distanceWalked + (x_y_point[0] **2 + x_y_point[1] **2)**.5 

listOfPoints은 같은 것입니다 경우 [[0,0], [0,1], [이 0,2], [1,2], [2,2]

또는 당신이 할 수있는 팬더를 사용하십시오. 지금

import pandas as pd 
df = pd.read_csv('info.txt',sep = '\t') 
df['helpercol'] = (df['x']**2 +df['y']**2)**.5 
df['cumDist'] = df['helpercol'].cumsum() 

, 당신은 당신의 dataframe에 시간당 누적 거리를해야합니다

0

점 사이의 유클리드 거리를 얻는 방법에는 여러 가지가 있습니다 :

NumPy와는 :

import numpy as np 
dist = np.linalg.norm(x-y) 
dist1= np.sqrt(np.sum((x-y)**2))) 

Scipy :

from scipy.spatial import distance 
dist = distance.euclidean(x,y) 
+0

감사합니다. scipy 기능은 내가 찾고있는 선을 따라 있지만 시간의 함수로 거리를 원합니다. 나는 그것에 관해 일할 수있다! –

+0

차가움. 속도를 말하는거야? – skrubber

+0

전체 걷기를위한 총 거리가 아니라 특정 시간 후에 사람이 걷는 총 거리. –