Numpy y배열을 x배열 기준으로 정렬하기
조회수 392회
넘파이 배열이
x=[x3,x6,x1,x4,x2,x5,x5]
여기서 x1<x2<x3<x4<x5<x6
y=[y3,y6,y1,y4,y2,y5,y5]
y값은 크고작음을 모름
이렇게 있을때, x를 np.sort()
함수를 이용하여 오름차순으로 변경하면,
x=[x1,x2,x3,x4,x5,x5,x6]
이렇게 변경이 됩니다.
이때 x값에 변경된것과 마찬가지로 같은위치의 y배열도 바꾸고 싶은데 어떻게하면 되나요?
예를들어 x1이 처음에는 x[2] 번째 배열에 있었고 똑같이 y1역시 y[2]에 위치합니다. x만 오름차순으로 변경하면 x1은 x[0]의 위치로 오게 되는데 이때 y1 역시 똑같이 y[0]로 오게하는 방법이 있나요?
y도 x와 같이 똑같이 오름차순 하면 안됩니다.
인덱싱 이용하는것 같은데 도와주시면 감사하겠습니다.
2 답변
-
>>> x = [ 2, 3, 1, 4, 5 ] >>> y = [ 22, 33, 11, 44, 55 ] >>> xy = list(zip(x, y)) >>> xy [(2, 22), (3, 33), (1, 11), (4, 44), (5, 55)] >>> sorted(xy) [(1, 11), (2, 22), (3, 33), (4, 44), (5, 55)] >>> list(zip(*sorted(xy)))[1] (11, 22, 33, 44, 55)
>>> import numpy as np >>> x [2, 3, 1, 4, 5] >>> y [22, 33, 11, 44, 55] >>> x = np.array(x) >>> y = np.array(y) >>> np.argsort(x) array([2, 0, 1, 3, 4], dtype=int64) >>> y_ = y[np.argsort(x)] >>> y_ array([11, 22, 33, 44, 55])
-
이렇게 하면 어떨까요?
x=[4, 1, 3, 2, 5, 7] y=[1, 2, 3, 4, 5, 6] new_y = [] d = sorted(dict(zip(x, y)).items()) for i in d: new_y.append(i[1]) print(new_y)
댓글 입력