Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 NumPy로 주어진 목록에서 숫자의 배수 찾기

이 글에서는 주어진 숫자의 배수가 존재하는 인덱스 위치를 찾는 파이썬 프로그램을 다룹니다. NumPy와 Pandas 라이브러리를 활용하면 이 작업을 효율적으로 수행할 수 있습니다.

알고리즘

1단계: Pandas 시리즈를 정의합니다.
2단계: 사용자로부터 숫자 n을 입력받습니다.
3단계: NumPy 라이브러리의 argwhere() 함수를 사용하여 시리즈에서 해당 숫자의 배수를 찾습니다.

기본 예제 코드

가장 직관적인 방법은 반복문과 나머지 연산자(%)를 사용하는 것입니다. 1부터 19까지의 숫자 배열을 만든 뒤, 입력받은 숫자로 나누어 떨어지는 값만 골라냅니다.

import numpy as np

listnum = np.arange(1, 20)
multiples = []

print("NumList:\n", listnum)
n = int(input("배수를 찾을 숫자를 입력하세요: "))
for num in listnum:
    if num % n == 0:
        multiples.append(num)
print("{}의 배수는 {}입니다".format(n, multiples))

실행 결과

NumList:
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
배수를 찾을 숫자를 입력하세요: 5
5의 배수는 [5, 10, 15]입니다

NumPy 벡터화 연산으로 개선하기

반복문 방식은 이해하기 쉽지만, 데이터 크기가 커지면 처리 속도가 느려질 수 있습니다. NumPy의 벡터화 연산argwhere() 함수를 함께 사용하면 배수의 값과 인덱스 위치를 한 번에 구할 수 있습니다.

import numpy as np

listnum = np.arange(1, 20)
n = int(input("배수를 찾을 숫자를 입력하세요: "))

# 나머지 연산으로 불리언 마스크 생성
mask = (listnum % n == 0)

# 배수의 인덱스 위치 찾기
indices = np.argwhere(mask).flatten()

# 배수 값 추출
multiples = listnum[mask]

print("인덱스 위치:", indices)
print("{}의 배수: {}".format(n, multiples))

실행 결과

배수를 찾을 숫자를 입력하세요: 5
인덱스 위치: [ 4  9 14]
5의 배수: [ 5 10 15]

코드 설명

  • np.arange(1, 20): 1부터 19까지의 정수 배열을 생성합니다.
  • listnum % n == 0: 각 요소를 n으로 나눈 나머지가 0인지 검사하여 불리언 마스크를 만듭니다.
  • np.argwhere(mask): 조건이 참(True)인 요소의 인덱스를 반환합니다.
  • listnum[mask]: 마스크를 이용해 조건에 해당하는 실제 값들만 추출합니다.

마무리

반복문 방식은 초보자에게 직관적이지만, 대용량 데이터를 다룰 때는 NumPy의 벡터화 연산이 훨씬 빠르고 효율적입니다. 데이터 크기와 목적에 맞게 두 방식을 적절히 선택하여 활용하시기 바랍니다.