4.10.9 매직 단축키: np.r_[]
np.c_가 파이썬 고수들의 강제로 기둥을 세우는 단축키였다면, np.r_은 무엇일까요? 바로 행 방향(Row-wise)으로 데이터를 옆으로 나란히 눕혀서 이어 붙이는 마법의 배열 소시지 공장입니다. Row의 앞 글자를 땄기 때문에 눕혀서 연결한다고 외우면 아주 쉽습니다.
[1단계] 1차원 배열들을 옆으로 나란히 (Row-wise) 잇기
가장 기본적인 기능은 여러 1차원 배열을 하나로 쭉 엮어내는 것입니다. 이것은 np.hstack과 완벽하게 똑같이 동작합니다.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 대괄호 주의! 배열 두 개를 옆으로 이어 붙입니다.
result_r = np.r_[a, b]
print("🌭 np.r_ 결합 결과: ", result_r)
[실행 결과]
🌭 np.r_ 결합 결과: [1 2 3 4 5 6]
[2단계] np.r_ 의 진가: 스칼라도, 슬라이싱도 한방에!
np.r_이 파이썬 고수들에게 사랑받는 진짜 이유는 배열, 단일 숫자(스칼라), 심지어 리스트 슬라이싱 문법(시작:끝:간격)까지 그냥 콤마(,)로 던져 넣으면 다 알아서 하나의 배열로 펼쳐서 소시지처럼 엮어주기 때문입니다.
# 1. 배열 a, 단일 숫자 0 과 0, 배열 b 를 순서대로 엮기
mixed_result = np.r_[a, 0, 0, b]
print("🧩 스칼라 섞어 엮기: ", mixed_result)
# 2. 슬라이싱(3부터 10전까지 3간격), 파이썬 리스트, 단일 숫자 섞기
# 3:10:3 은 [3, 6, 9] 로 펼쳐집니다!
slice_result = np.r_[3:10:3, [0]*2, 5, 6]
print("🍕 슬라이스 섞어 엮기:", slice_result)
# 3. 허수(j)를 이용한 마법: linspace(등분) 대용으로 쓰기
# -1 부터 1 까지 끝수를 포함하여 총 6개(6j)로 쪼개달라는 등분 문법입니다.
complex_result = np.r_[-1:1:6j, [0]*2, 5, 6]
print("🪄 제다이 문법(6j): ", complex_result)
[실행 결과]
🧩 스칼라 섞어 엮기: [1 2 3 0 0 4 5 6]
🍕 슬라이스 섞어 엮기: [3 6 9 0 0 5 6]
🪄 제다이 문법(6j): [-1. -0.6 -0.2 0.2 0.6 1. 0. 0. 5. 6. ]
[심화반 꿀팁] 매직 스트링 조작 기법: '0, 3, 0'
이 부분은 아주 복잡한 3차원 데이터 매니징을 할 때나 아주 가끔 쓰이는 흑마법에 가깝습니다. np.r_['i, j, k', 배열1, 배열2] 처럼 맨 앞에 세자리 숫자로 된 문자열명령어(매직 스트링)를 내려서 엮어내는 방법입니다.
첫번째 인자(i): 결합할 축(axis) 번호. 축 0이면 수직으로 층층이 결합두번째 인자(j): 배열을 최소 몇 차원(Dimension) 형태까지 강제로 부풀릴 것인가. (예: 3이면 무조건 3차원으로 뻥튀기)세번째 인자(k): 부풀린 차원 중에서, 원래 데이터(모양)가 존재해야 할 축의 위치 인덱스
a = np.array([[0, 1, 2], [3, 4, 5]]) # 2x3 배열
# '0': 축 0 방향으로 그냥 쌓아라 (np.vstack 처럼)
print("1. 형태 유지 층층이 쌓기:\n", np.r_['0', a, a])
# '0, 3, 1': 축 0으로 쌓되, 3차원으로 부풀리고, 본래 데이터 길이는 1번 축(가운데)에 넣어라
# [1, 2, 3]과 [4, 5, 6]이 각각 (1, 3, 1)로 부풀어 축 0으로 쌓임 -> (2, 3, 1) 모양 탄생!
print("\n2. 기괴한 3차원 부풀리기 조립:\n", np.r_['0, 3, 1', [1,2,3], [4,5,6]])
[실무 꿀팁 요약]
[-1:1:6j]같은 슬라이싱 축약 기법이나['0, 3, 0']같은 매직 스트링 기법은 코드를 극한으로 줄이는 ‘코드 골프(Code Golf)’에서나 볼 법한 기교입니다. 우리는 초보자이므로np.r_[배열1, 스칼라, 배열2]처럼 여러 유형의 데이터를 자유롭게 소시지처럼 이어주는 멋진 기능(2단계)까지만 알아두셔도 실무 전투력 향상에 큰 무기가 됩니다!
서브목차