2017-10-15 22 views
0

나는 비행기에서 모양을 이동, 크기 조정 및 회전하고 이러한 속임수를 추적 및보고하기 위해 데카르트 방법과 삼각법을 사용하는 파이썬 코드를 작성하고 있습니다.파이썬에서 좌표를 다루기에 가장 적합한 변수 유형

일반적으로 사용자 명령은 단일 이동/회전/크기 조정 작업으로 이어진다.

도형 좌표 및 치수 쌍에 가장 적합한 변수 유형이 무엇인지, 왜 그런지 알고 싶습니다. 나는 생각했다

유형은 다른 좋은 옵션을 알고 있다면

x = 10 
y = -15 

list_coords = [x, y] 
tuple_coords = (x, y) 

import numpy as np 
array_coords = np.array([x, y]) 

import cmath as cm 
complex_coords = x + j*y 

는 또한 그것에 대해 말씀 해주십시오이다.

감사합니다.

답변

2

단답형 튜플 "What's the difference between lists and tuples?"스레드에서

,

튜플 이종 데이터 구조 (즉, 자신의 항목 다른 의미를 가진다)리스트 균일 시퀀스 동안.

튜플에는 구조가 있고 목록에는 순서가 있습니다. 이 구별을 사용하면 코드가 더 명확하고 이해할 수있게됩니다.

튜플은 호모 지우스 엔티티 순서가 아닌 이기종 엔티티로 이루어져 있으므로 튜플은 좌표계를 처리하는 좋은 방법입니다. 또한 더하기 &과 같은 좌표 연산은 튜플을 사용하면 상당히 간단합니다.

예 :

import operator 
a = (1,2,3) 
b = (5,6,7) 
c = tuple(map(operator.add, a, b)) 

또한 튜플은 불변이다. 이것은 처음에는 불편한 것처럼 보이지만, 함수 프로그래밍 기법에서 이와 같이 불변의 데이터를 사용하는 것은 상당한 장점이 있습니다.

+1

감사합니다. 내 직관은 튜플이 옳다는 소리도 들려 왔지만, 나는지도/조작자 같은 것을 모르고 있었고 (b) 당신이 말한 것처럼, 사실 나는 할 수 없다. tuple_coord [0] = 12. 그러나 이러한 종류의 불편 함은 좌표의 본질을 그들이 관련되어 있음을 반영한다고 생각하기 시작했다. 그리고 작업으로 인해 변경 될 수 있다면 거의 항상 잠재적으로 변경 될 수있다. 다른 하나. – levraininjaneer

0

다양한 옵션이 있습니다. 다각형을 고려하십시오. 대부분의 GIS 프로그램에서 첫 번째와 마지막 점은 다각형으로 'A'위의 DTYPE 간단한 float64입니다

import numpy as np 
a = np.array([[0., 0.], [0., 1000.], [1000., 1000.], [1000., 0.], [ 0., 0.]]) 
a 
array([[ 0.,  0.], 
     [ 0., 1000.], 
     [ 1000., 1000.], 
     [ 1000.,  0.], 
     [ 0.,  0.]]) 

을 NumPy와 사용 아래 폐쇄를 형성하기 위해 반복된다. 다음과 같이 적절한 데이터 형식을 지정하여 구조화 된 배열로 변환 할 수 있습니다 : 당신은 한 단계 더 나아가 당신이 당신의 객체 표기법을 object.property 사용하는 것을 선호하는 경우 'recarray'를 생성 할 수 있습니다

b = np.zeros((a.shape[0]), dtype=[('Xs', '<f8'), ('Ys', '<f8')]) 
b['Xs'] = a[:,0]; b['Ys'] = a[:,1] 
b 
array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 1000.0), (1000.0, 0.0), (0.0, 0.0)], 
     dtype=[('Xs', '<f8'), ('Ys', '<f8')]) 

. 균일 DTYPE와 표준 배열로

c = b.view(np.recarray) 

, 당신은 당신이 개체를 사용할 수있는 recarray와 함께, 마지막으로 당신이 열 이름으로 슬라이스 할 수있는 기능을 추가 구조화 된 배열, 슬라이스를 사용하여 X 값에 액세스 할 수 있습니다. 속성 표기법.

args = [a[:,0], b['Xs'], c.Xs] # ---- get the X coordinates 
print('{}\n{}\n{}'.format(*args)) 
[ 0.  0. 1000. 1000.  0.] 
[ 0.  0. 1000. 1000.  0.] 
[ 0.  0. 1000. 1000.  0.] 

당신은 .. 배열의 독특한 점에서 다각형의 중심을 얻을 수

np.mean(a[:-1], axis=0) 
array([ 500., 500.]) 
가 올바른 형태

np.unique(b) 

array([(0.0, 0.0), (0.0, 1000.0), (1000.0, 0.0), (1000.0, 1000.0)], 
     dtype=[('Xs', '<f8'), ('Ys', '<f8')]) 
주어진 배열에서 독특한 포인트를 쉽게 얻을 사실

당신은 기존의 ndarrays, 명명 된 필드 및 재 배열을 사용하는 사람들 사이를왔다 갔다하고 왔다는 것을 알았을 것입니다. 원하는 경우 동일한 데이터를 사용하고 다른 방식으로 볼 수 있기 때문입니다.