2017-05-21 2 views
3

내가 이차원 NumPy와 배열이 좌표 :NumPy와 배열

arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) 

방법 I에 판다 데이터 프레임에이 변환에 대한 갈 것이다 y는 좌표가 X 좌표 것, 및 이런 팬더 데이터 프레임에 해당 인덱스 어레이 값을 대응 : 스택

x y val 
0 0 1 
0 1 4 
0 2 7 
1 0 2 
1 1 5 
1 2 8 
... 

답변

5

리셋 인덱스 :

df = pd.DataFrame(arr).stack().rename_axis(['y', 'x']).reset_index(name='val') 
df 

Out: 
    y x val 
0 0 0 1 
1 0 1 2 
2 0 2 3 
3 1 0 4 
4 1 1 5 
5 1 2 6 
6 2 0 7 
7 2 1 8 
8 2 2 9 
,536,913,632 순서가 중요하다면 10

:

df.sort_values(['x', 'y'])[['x', 'y', 'val']].reset_index(drop=True) 
Out: 
    x y val 
0 0 0 1 
1 0 1 4 
2 0 2 7 
3 1 0 2 
4 1 1 5 
5 1 2 8 
6 2 0 3 
7 2 1 6 
8 2 2 9 
1

는 여기 NumPy와 방법입니다 -

>>> arr 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 
>>> shp = arr.shape 
>>> r,c = np.indices(shp) 
>>> pd.DataFrame(np.c_[r.ravel(), c.ravel(), arr.ravel('F')], \ 
           columns=((['x','y','val']))) 

    x y val 
0 0 0 1 
1 0 1 4 
2 0 2 7 
3 1 0 2 
4 1 1 5 
5 1 2 8 
6 2 0 3 
7 2 1 6 
8 2 2 9 
+0

arr.shape이 (3, 3) 그래서 당신의 X0 행은 [1, 2, 3]. 그러나 귀하의 코드는 행 대신에 첫 번째 열을 가지고 있습니다 (x0 = [1, 4, 7] ...). 문제 문이 [1, 4, 7]을 원하는 출력에 표시하지만, 실제 올바른 좌표 (@ayhan right right) – WaveRider

+0

@WaveRider 미안하지만, 당신이 무엇을 말하려고하는지 잘 모르겠다. 다시 시도 할 수 있을까? 결과는 ayhan과 같고 질문의 예상 출력도 마찬가지다. . – Divakar

+0

확실히, 원래 배열 정의를 보아라 : arr = np.array ([[1,2,3], [4,5,6], [7,8,9]])'- 첫번째 행 이 배열은 [1,2,3]이고 해당 좌표 x, y 쌍은 x0, y0 = 1, x0, y1 = 2 및 x0, y2 = 3입니다. 사용자가 부과 한 변환 후에 이러한 매핑이 실제로 변경됩니다 x0, y0 = 1, x0, y1 = 4 및 x0, y2 = 7이되므로 원래의 좌표 맵핑의 무결성이 손실됩니다 (문제 문은 x, y 좌표를 올바르게 매핑하는 것으로 설명되지만 문제 문에 표시된 원하는 결과 쇼 위에서 설명한 잘못된 매핑). @ayhan은 모두 – WaveRider