Python/Numpy

[Numpy] np.append 사용법 : 배열끼리 이어 붙인 결과 반환

jimmy_AI 2022. 4. 6. 00:12
반응형

파이썬 넘파이 append 함수 사용 예제

Numpy 라이브러리에서 배열들을 이어 붙인 결과를 손쉽게 얻어낼 수 있는

append 함수의 사용법에 대해서 경우의 수를 중심으로 이해해보도록 하겠습니다.

 

 

Numpy append 함수 기본 사용 방법

리스트 두 개를 이어 붙일 때는 + 연산으로 쉽게 진행이 가능합니다.

그러나, numpy array 자료형은 + 연산으로 원소 간 덧셈이 대신 진행되며

이어 붙이기를 원하는 상황에서는 다른 방법이 필요하게 됩니다.

 

넘파이 배열을 붙이는 방법은 여러 가지가 있지만

append 메소드를 사용하여 np.append(a, b)처럼 작성해주시면

두 배열을 이어 붙인 결과를 쉽게 반환받을 수 있습니다.

 

가장 간단한 예시로 1차원 배열끼리 붙이는 코드는 아래와 같습니다.

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

a + b # array([5, 7, 9]) : 원소 간 덧셈 진행
[1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6] : 리스트 이어 붙이기

np.append(a, b) # array([1, 2, 3, 4, 5, 6]) : 넘파이 배열 이어 붙이기

 

 

np.append 반환 결과 특징

np.append 함수의 특징으로는 두 array 내의 값들을 축 순서대로 읽은 뒤,

전체 값들을 1차원 배열로 펼친 결과를 반환한다는 것입니다.

 

가령, 2차원 + 1차원 배열을 시도하는 경우 다음과 같이 결과가 등장합니다.

a = np.array([[1, 2],
              [3, 4]])
b = np.array([5, 6])

np.append(a, b) # array([1, 2, 3, 4, 5, 6])
반응형

np.append axis 설정 방법, 유의 사항

append 함수 활용의 특수한 경우로 두 배열을 이어 붙일 축을 설정하여 해당 방향대로 쌓아

np.concatenate 함수와 유사한 결과를 반환 받을 수 있게 해주는 axis 인자 설정을 지원합니다.

 

np.concatenate 함수의 사용 예제가 궁금하신 분들은 아래의 이전 글을 참고해주세요.

 

[Numpy] 배열 쌓기 : np.hstack, np.vstack, np.concatenate 차이 비교

넘파이 배열 쌓기 함수 : np.hstack, np.vstack, np.concatenate 비교 안녕하세요. 이번 글에서는 넘파이 array를 원하는 방향으로 쌓을 수 있는 np.hstack, np.vstack 그리고 np.concatenate의 기능 차이를 비교..

jimmy-ai.tistory.com

 

append 함수 내에서 axis를 설정할 경우,

두 배열의 차원이 일치하지 않으면 ValueError가 발생합니다.

예시로 axis = 0 설정 후, 2차원 + 1차원 배열의 append 사용 시도 결과는 아래와 같습니다.

a = np.array([[1, 2],
              [3, 4]])
b = np.array([5, 6]) # 1차원 array

np.append(a, b, axis = 0)
# ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)

 

다만, 위의 예시에서 b 배열을 괄호 2개로 감싸 2차원 배열로 변경해주면

axis = 0 축 방향으로 배열 쌓기가 가능해집니다.

b를 2차원 array로 바꾼 뒤, axis에 따른 append 결과를 비교해보겠습니다.

a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6]]) # 2차원 array

np.append(a, b) # array([1, 2, 3, 4, 5, 6])

np.append(a, b, axis = 0)
'''
array([[1, 2],
       [3, 4],
       [5, 6]])'''
       
np.append(a, b, axis = 1)
# ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 2 and the array at index 1 has size 1

axis를 설정하지 않은 경우는 앞의 예시들과 마찬가지로 1차원 배열이 반환되며,

axis = 1의 경우는 해당 축끼리의 shape이 불일치하여 쌓기에 실패한 모습도 볼 수 있었습니다.

 

다소 복잡한 예시로, (2, 2) shape의 2차원 배열끼리

axis 미설정, axis = 0 및 axis = 1로 append를 적용한 결과를 비교한 코드는 아래와 같았습니다.

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

np.append(a, b) # array([1, 2, 3, 4, 5, 6, 7, 8])

np.append(a, b, axis = 0)
'''
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])'''
       
np.append(a, b, axis = 1)
'''
array([[1, 2, 5, 6],
       [3, 4, 7, 8]])'''

이 경우는 axis = 0, 1 방향 모두 두 배열 간 해당 축 방향 shape이 일치하여

각각의 방향대로 배열 쌓기가 성공한 모습을 볼 수 있었습니다.