1. 데이터 과학
데이터 과학은 다양한 데이터로부터 유용한 지식과 인사이트를 도출하기 위해 데이터 처리 과정, 과학적 방법론, 알고리즘, 시스템 등을 결합하는 분야입니다. 이 과정에서는 정형, 비정형, 반정형 데이터 모두가 사용됩니다.
• 정형 데이터는 표나 데이터베이스처럼 일정한 형식을 갖춘 데이터로, 예를 들어 엑셀 파일이나 관계형 데이터베이스의 자료가 포함됩니다.
• 비정형 데이터는 특정한 형식 없이 인간 언어처럼 자연스럽게 표현된 데이터로, 웹 페이지나 뉴스 기사처럼 구문 분석이 필요한 데이터가 해당됩니다.
• 반정형 데이터는 JSON 파일과 같이 문자열 기반으로 부분적으로 형식화된 데이터를 의미하며, 구조와 비구조적 요소가 혼재된 형태를 띱니다.
데이터 과학자는 이러한 다양한 유형의 데이터를 적절히 처리하고 분석하여 유용한 정보를 추출해내며, 이는 다양한 분야에서 의사결정에 중요한 역할을 합니다.
데이터 과학에서는 데이터를 다루기 위해 여러 단계의 과정을 거칩니다. 각각의 단계는 데이터를 유용한 정보로 변환하는 데 중요한 역할을 합니다.
1. 데이터 수집 및 추출: 필요한 데이터를 모으는 과정으로, 웹 스크래핑, API 활용, 데이터베이스에서 추출 등 다양한 방법을 통해 데이터가 수집됩니다. 이 과정에서 데이터를 적절한 형태로 확보하는 것이 중요합니다.
2. 데이터 처리: 수집된 데이터는 정제 및 전처리를 거쳐 분석에 적합한 형태로 가공됩니다. 여기에는 결측치 처리, 이상치 제거, 데이터 형식 변환 등이 포함되며, 데이터의 신뢰성과 정확성을 높이는 작업입니다.
3. 데이터 분석: 처리된 데이터를 기반으로 통계적 분석, 기계 학습 모델링 등을 수행하여 데이터를 통해 유의미한 패턴이나 인사이트를 발견합니다. 분석 결과는 의사결정에 중요한 기초가 됩니다.
4. 데이터 시각화: 분석 결과를 이해하기 쉽게 시각적으로 표현하는 과정입니다. 그래프, 차트, 대시보드 등 다양한 시각화 도구를 사용하여 데이터를 시각적으로 표현함으로써, 결과를 쉽게 이해하고 전달할 수 있도록 합니다.
이러한 일련의 과정이 데이터 과학에서 필수적이며, 이를 통해 다양한 데이터로부터 유의미한 정보를 추출하고 분석할 수 있습니다.
데이터 수집 파이프라인은 데이터 수집부터 처리, 저장까지의 전 과정을 자동화하는 일련의 단계로, 이를 통해 데이터가 일관되게 관리되고 필요한 분석을 위한 기반이 마련됩니다. 일반적인 데이터 수집 파이프라인의 단계는 다음과 같습니다.
1. 데이터 소스 식별: 필요한 데이터를 어디에서 수집할지 결정합니다. 데이터 소스는 웹 사이트, 데이터베이스, API, 로그 파일, 센서 데이터 등 다양한 형태일 수 있습니다.
2. 데이터 수집: 데이터 소스로부터 데이터를 자동으로 가져오는 과정입니다. 웹 스크래핑, API 호출, 데이터베이스 쿼리 등 다양한 수집 방식이 사용됩니다. 이 과정은 일정한 주기로 데이터를 수집할 수 있도록 설정되어 데이터의 최신성을 유지합니다.
3. 데이터 전처리 및 정제: 수집한 데이터를 분석에 적합하게 가공하는 단계입니다. 여기에는 데이터의 결측치 처리, 이상치 제거, 형식 통일, 중복 데이터 제거, 데이터 타입 변환 등이 포함됩니다. 이를 통해 데이터의 정확성과 일관성을 확보합니다.
4. 데이터 변환 및 정규화: 데이터를 분석이나 저장에 적합한 형태로 변환합니다. 예를 들어, 카테고리 데이터를 숫자로 인코딩하거나, 날짜 형식을 일관되게 맞추는 작업이 이루어집니다. 필요에 따라 데이터가 특정 기준에 맞게 표준화되기도 합니다.
5. 데이터 저장: 정제된 데이터를 데이터베이스, 데이터 웨어하우스, 데이터 레이크 등 저장소에 저장합니다. 이 과정에서 데이터의 형식과 저장 위치가 관리되며, 이후의 분석 작업을 위해 데이터를 효율적으로 관리할 수 있습니다.
6. 모니터링 및 오류 관리: 데이터 수집 파이프라인이 안정적으로 운영되도록 실시간 모니터링을 통해 오류를 감지하고 수정하는 단계입니다. 오류가 발생할 경우 자동으로 알림이 전송되며, 데이터 손실이나 일관성 문제가 발생하지 않도록 관리합니다.
데이터 수집 파이프라인은 데이터 과학과 분석에 필요한 고품질의 데이터를 안정적이고 일관되게 제공하기 위해 필수적입니다.
numpy, matplotlib, pandas를 설치하려면 Python 패키지 관리자인 pip을 사용할 수 있습니다. 아래 명령어를 터미널이나 명령 프롬프트에 입력하여 설치하세요.
pip install numpy matplotlib pandas
각 라이브러리를 개별적으로 설치할 수도 있습니다:
pip install numpy
pip install matplotlib
pip install pandas
설치가 완료되면, Python 환경에서 다음과 같이 라이브러리를 불러와서 설치가 성공적으로 완료되었는지 확인할 수 있습니다.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
이렇게 하면 numpy, matplotlib, pandas가 정상적으로 설치된 것입니다.
2. NumPy
NumPy(넘파이)는 2005년 Travis Oliphant가 발표한 수치 해석용 Python 라이브러리로, 주로 과학 계산과 데이터 분석에 사용됩니다. NumPy는 다차원 배열 자료 구조인 ndarray를 지원하며, 이는 벡터와 행렬 연산에 최적화된 데이터 구조입니다. 이러한 배열 구조는 수치 해석, 선형 대수, 통계 계산, 그리고 다양한 과학적 연산을 효율적으로 수행하는 데 도움을 줍니다.
NumPy의 주요 특징:
• 다차원 배열(ndarray): 다차원 배열 객체를 지원하여 1차원 벡터, 2차원 행렬, 고차원 배열까지 다룰 수 있습니다.
• 벡터화된 연산: 배열 요소에 대해 반복 연산을 자동으로 수행하여, 복잡한 루프를 대체할 수 있으며, 연산이 빠르고 간결해집니다.
• 다양한 수치 계산 기능: 선형 대수, 통계, 무작위 수 생성, 푸리에 변환 등 수학적 함수들이 내장되어 있어 수치 해석 작업을 쉽게 수행할 수 있습니다.
• 다른 라이브러리와 호환성: Pandas, SciPy, Matplotlib 같은 라이브러리와 자연스럽게 통합되어 데이터 분석과 시각화를 손쉽게 수행할 수 있습니다.
NumPy는 데이터 과학, 머신러닝, 과학 연구에서 필수적인 도구로 자리 잡고 있으며, 특히 대규모 데이터셋의 효율적인 처리와 분석에 많이 사용됩니다.
ndarray는 NumPy의 핵심 배열 객체로, 배열 연산의 효율성을 높이기 위해 사용됩니다. ndarray는 배열의 차원(ndim), 크기(shape), 자료형(dtype) 정보를 저장하며, 배열의 데이터 연산을 빠르고 효율적으로 처리할 수 있게 해줍니다.
ndarray 생성 방법과 예제
1. array() 함수로 리스트나 튜플을 배열로 변환
• array() 함수를 사용하여 파이썬의 리스트나 튜플을 NumPy 배열로 변환할 수 있습니다.
import numpy as np
# 리스트를 ndarray로 변환
list_data = [1, 2, 3, 4, 5]
array_data = np.array(list_data)
print("Array from list:", array_data)
print("차원:", array_data.ndim) # 배열의 차원
print("크기:", array_data.shape) # 배열의 크기
print("자료형:", array_data.dtype) # 배열의 자료형
2. arange() 함수로 범위 내 값의 배열 생성
• arange(start, end, step) 함수는 특정 범위 내의 값을 일정한 간격으로 배열로 생성합니다.
# 0부터 10까지 2씩 증가하는 배열 생성
range_array = np.arange(0, 10, 2)
print("Array with arange:", range_array)
3. 배열의 자료형
• 리스트나 튜플은 다양한 자료형을 포함할 수 있지만, NumPy 배열은 한 가지 자료형만을 사용해야 합니다. 배열 생성 시 자료형을 지정할 수도 있습니다.
# 정수형 배열 생성
int_array = np.array([1, 2, 3], dtype=int)
print("Integer array:", int_array)
# 실수형 배열 생성
float_array = np.array([1, 2, 3], dtype=float)
print("Float array:", float_array)
이러한 배열 생성 방식은 대규모 데이터의 계산 속도를 높이고 일관된 자료형을 유지하도록 하여 데이터 분석과 수치 계산에서 유용하게 활용됩니다.
NumPy 배열은 리스트와 달리 각 요소에 대해 반복문 없이 배열 전체에서 직접 연산을 수행할 수 있습니다. 이러한 배열 연산은 벡터화(vectorization)되어 빠르고 효율적으로 처리됩니다. 리스트와 비교했을 때, NumPy 배열은 반복문을 사용하지 않고도 연산을 적용할 수 있어 코드가 간결해지고 실행 속도가 빨라집니다.
배열 연산 예제
1. 배열 간의 사칙연산
NumPy 배열 간의 덧셈, 뺄셈, 곱셈, 나눗셈 등 다양한 연산이 배열 전체에 적용됩니다.
import numpy as np
array1 = np.array([1, 2, 3, 4])
array2 = np.array([5, 6, 7, 8])
# 배열 덧셈
add_result = array1 + array2
print("덧셈:", add_result)
# 배열 뺄셈
sub_result = array1 - array2
print("뺄셈:", sub_result)
# 배열 곱셈
mul_result = array1 * array2
print("곱셈:", mul_result)
# 배열 나눗셈
div_result = array1 / array2
print("나눗셈:", div_result)
2. 스칼라 연산
배열에 스칼라 값을 더하거나 곱할 때, 배열의 모든 요소에 해당 연산이 적용됩니다.
scalar_add = array1 + 10
print("스칼라 덧셈:", scalar_add)
scalar_mul = array1 * 3
print("스칼라 곱셈:", scalar_mul)
3. 제곱, 제곱근, 지수 연산 등 다양한 함수 지원
NumPy는 배열에 대해 제곱, 제곱근, 지수와 같은 다양한 수학 함수를 제공합니다.
# 제곱
squared = array1 ** 2
print("제곱:", squared)
# 제곱근
sqrt_result = np.sqrt(array1)
print("제곱근:", sqrt_result)
# 지수
exp_result = np.exp(array1)
print("지수:", exp_result)
4. 비교 연산
배열끼리 비교하여 각 요소에 대해 참(True) 또는 거짓(False)으로 결과를 반환합니다.
comparison = array1 > 2
print("비교 (array1 > 2):", comparison)
이와 같이 NumPy 배열을 사용하면 반복문 없이도 빠르고 효율적인 연산이 가능하며, 이를 통해 데이터 분석, 수치 계산에서 성능과 코드 간결성을 모두 향상시킬 수 있습니다.
NumPy에서는 1차원 배열뿐만 아니라 2차원, 3차원 등 여러 차원의 배열을 생성할 수 있습니다. 다차원 배열은 다차원 리스트나 튜플을 사용해 만들 수 있으며, 배열의 형태는 reshape() 함수를 통해 쉽게 변경할 수 있습니다.
다차원 배열 생성 및 예제
1. 다차원 배열 생성
• 다차원 배열은 다차원 리스트나 튜플을 전달하여 생성할 수 있습니다.
import numpy as np
# 2차원 배열 생성
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("2차원 배열:\n", array_2d)
print("차원:", array_2d.ndim) # 2차원
print("크기:", array_2d.shape) # (2, 3)
2. reshape()로 배열 형태 변경
• reshape() 함수를 사용하여 배열의 형태를 변경할 수 있습니다. 예를 들어, 1차원 배열을 2차원 배열로 변환할 수 있습니다. 단, 배열의 요소 개수는 변경 전후에 같아야 합니다.
# 1차원 배열 생성
array_1d = np.array([1, 2, 3, 4, 5, 6])
print("1차원 배열:", array_1d)
# 2x3 형태의 2차원 배열로 변경
array_2d_reshaped = array_1d.reshape(2, 3)
print("2차원 배열로 변경:\n", array_2d_reshaped)
# 3차원 배열로 변경 (2x3x1 형태)
array_3d_reshaped = array_1d.reshape(2, 3, 1)
print("3차원 배열로 변경:\n", array_3d_reshaped)
3. 다차원 배열 예제: 3차원 배열
• 3차원 배열을 다차원 리스트로 생성할 수 있습니다.
# 3차원 배열 생성
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3차원 배열:\n", array_3d)
print("차원:", array_3d.ndim) # 3차원
print("크기:", array_3d.shape) # (2, 2, 2)
reshape()를 사용하면 배열의 차원을 유연하게 변경할 수 있어 다양한 데이터 형태를 다룰 때 매우 유용합니다.
NumPy 배열에서는 인덱싱을 통해 특정 요소에 접근하거나 값을 변경할 수 있으며, 배열을 잘라내어 부분 배열을 추출하는 것도 가능합니다. 다차원 배열에서도 각 차원에 대해 인덱싱을 지정하여 필요한 요소에 접근할 수 있습니다.
1차원 배열 인덱싱과 값 변경
import numpy as np
# 1차원 배열 생성
array_1d = np.array([10, 20, 30, 40, 50])
# 특정 원소 접근
print("첫 번째 원소:", array_1d[0]) # 출력: 10
# 원소 값 변경
array_1d[0] = 100
print("변경된 배열:", array_1d) # 출력: [100, 20, 30, 40, 50]
2차원 배열 인덱싱과 값 변경
2차원 배열에서는 [행, 열] 형식으로 인덱스를 지정해 요소에 접근할 수 있습니다.
# 2차원 배열 생성
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 특정 원소 접근 (2행 3열)
print("원래 값:", array_2d[1, 2]) # 출력: 6
# 원소 값 변경
array_2d[1, 2] = 60
print("변경된 배열:\n", array_2d)
배열 자르기 (슬라이싱)
NumPy 배열에서 슬라이싱을 통해 배열의 특정 부분을 잘라낼 수 있습니다. 슬라이싱 구문은 [시작:끝:간격] 형식으로 작성됩니다.
1차원 배열 슬라이싱
# 1차원 배열 슬라이싱
array_1d = np.array([10, 20, 30, 40, 50])
print("1~3번째 요소:", array_1d[1:4]) # 출력: [20, 30, 40]
2차원 배열 슬라이싱
2차원 배열에서는 각 차원에 대해 슬라이싱 범위를 지정할 수 있습니다.
# 2차원 배열 슬라이싱
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 첫 두 행과 첫 두 열 선택
print("부분 배열:\n", array_2d[:2, :2]) # 출력: [[1, 2], [4, 5]]
슬라이싱을 이용한 값 변경
슬라이싱으로 선택한 부분 배열의 값을 한꺼번에 변경할 수 있습니다.
# 2차원 배열 일부 변경
array_2d[:2, :2] = 0
print("변경된 배열:\n", array_2d) # 출력: [[0, 0, 3], [0, 0, 6], [7, 8, 9]]
이렇게 인덱싱과 슬라이싱을 활용하면 NumPy 배열에서 효율적으로 필요한 요소에 접근하거나 수정할 수 있습니다.
NumPy의 브로드캐스팅(broadcasting)은 서로 다른 크기의 배열 간에도 수학적 연산을 가능하게 하는 기능입니다. 이를 통해 반복문 없이 배열의 각 요소에 대해 연산을 수행할 수 있습니다. 일반적으로 크기가 동일한 배열 간의 연산만 가능하지만, 브로드캐스팅을 통해 작은 배열을 큰 배열의 각 요소에 맞춰 자동으로 확장하여 연산을 수행할 수 있습니다.
브로드캐스팅 예제
1. 스칼라와 배열의 연산
• 스칼라 값과 배열 간의 연산에서는 스칼라 값이 배열의 각 요소에 대해 확장됩니다.
import numpy as np
array = np.array([1, 2, 3, 4])
result = array + 10 # 각 요소에 10이 더해짐
print("스칼라 + 배열 결과:", result) # 출력: [11, 12, 13, 14]
2. 서로 다른 크기의 배열 간 연산
• 작은 배열이 큰 배열의 차원에 맞게 확장되어 연산이 수행됩니다.
array1 = np.array([[1, 2, 3], [4, 5, 6]])
array2 = np.array([10, 20, 30])
# array2가 array1의 각 행에 맞춰 확장되어 더해짐
result = array1 + array2
print("서로 다른 크기 배열 간 연산 결과:\n", result)
# 출력: [[11, 22, 33],
# [14, 25, 36]]
3. 다차원 배열과 1차원 배열 간의 연산
• 다차원 배열의 특정 차원과 맞는 크기의 1차원 배열을 사용하여 연산이 가능합니다.
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array_1d = np.array([1, 0, 1])
# array_1d가 각 행에 맞춰 확장되어 연산됨
result = array_2d + array_1d
print("다차원 배열과 1차원 배열 간 연산 결과:\n", result)
# 출력: [[2, 2, 4],
# [5, 5, 7],
# [8, 8, 10]]
브로드캐스팅 규칙
브로드캐스팅이 적용되기 위해서는 다음의 규칙을 따라야 합니다:
• 두 배열의 차원이 맞지 않는 경우, 더 작은 배열의 앞쪽에 필요한 만큼 1을 추가하여 동일한 차원 수로 만듭니다.
• 각 차원의 크기가 동일하거나, 하나의 크기가 1인 경우에만 브로드캐스팅이 가능합니다. 1인 차원은 큰 배열의 해당 차원 크기에 맞게 확장됩니다.
브로드캐스팅은 코드의 간결성을 높이고, 다차원 배열 연산의 유연성을 강화하여 데이터 분석과 수학적 연산을 편리하게 해줍니다.
NumPy의 유니버설 함수(ufunc)는 벡터화된 연산을 제공하여 반복문 없이 배열의 각 요소에 대해 수학적, 논리적 연산을 효율적으로 수행할 수 있는 함수입니다. ufunc는 주로 속도와 메모리 사용의 효율성을 극대화하는 데 중점을 둡니다. 다양한 유니버설 함수가 있으며, 수학, 논리, 비트 연산 등 여러 범주에 걸쳐 제공됩니다.
주요 ufunc 예제
1. 산술 연산
산술 연산 ufunc는 기본적인 사칙연산과 제곱, 로그, 제곱근 등의 수학 연산을 제공합니다.
import numpy as np
array = np.array([1, 2, 3, 4])
# 덧셈
add_result = np.add(array, 5)
print("add:", add_result) # 출력: [6, 7, 8, 9]
# 곱셈
multiply_result = np.multiply(array, 2)
print("multiply:", multiply_result) # 출력: [2, 4, 6, 8]
# 부정(음수로 전환)
negative_result = np.negative(array)
print("negative:", negative_result) # 출력: [-1, -2, -3, -4]
# 지수
exp_result = np.exp(array)
print("exp:", exp_result) # 출력: [2.71828183, 7.3890561 , 20.08553692, 54.59815003]
# 로그
log_result = np.log(array)
print("log:", log_result) # 출력: [0., 0.69314718, 1.09861229, 1.38629436]
# 제곱근
sqrt_result = np.sqrt(array)
print("sqrt:", sqrt_result) # 출력: [1., 1.41421356, 1.73205081, 2.]
2. 삼각 함수
삼각 함수 ufunc는 삼각 함수 값을 계산하며, 고급 삼각 연산도 포함합니다.
# 삼각 함수
sin_result = np.sin(array)
print("sin:", sin_result)
cos_result = np.cos(array)
print("cos:", cos_result)
# 빗변 계산 (hypot)
hypot_result = np.hypot(array, 5)
print("hypot:", hypot_result) # 예: [5.099, 5.385, 5.831, 6.403]
3. 비트 연산
비트 연산 ufunc는 비트 수준의 연산을 수행합니다.
# 비트 연산
array2 = np.array([0, 1, 3, 7])
bitwise_and_result = np.bitwise_and(array, array2)
print("bitwise_and:", bitwise_and_result)
left_shift_result = np.left_shift(array, 1)
print("left_shift:", left_shift_result) # 출력: [2, 4, 6, 8]
4. 관계형, 논리 연산
관계형 및 논리 연산 ufunc는 비교 연산 및 논리적 연산을 제공합니다.
# 비교 연산
less_result = np.less(array, 3)
print("less:", less_result) # 출력: [True, True, False, False]
# 논리 부정
logical_not_result = np.logical_not(less_result)
print("logical_not:", logical_not_result) # 출력: [False, False, True, True]
# 값 비교
equal_result = np.equal(array, 2)
print("equal:", equal_result) # 출력: [False, True, False, False]
5. 최소, 최대 함수
maximum()과 minimum() 함수는 두 배열의 각 요소를 비교하여 최대값 또는 최소값을 반환합니다.
array3 = np.array([0, 2, 1, 5])
# 최대값 비교
maximum_result = np.maximum(array, array3)
print("maximum:", maximum_result) # 출력: [1, 2, 3, 5]
# 최소값 비교
minimum_result = np.minimum(array, array3)
print("minimum:", minimum_result) # 출력: [0, 2, 1, 4]
6. 부동소수점 함수
부동소수점과 관련된 함수는 숫자가 무한대인지, NaN(Not a Number) 값인지 확인하고 반올림을 수행합니다.
float_array = np.array([1.0, np.inf, np.nan, -np.inf])
# 무한대 확인
isinf_result = np.isinf(float_array)
print("isinf:", isinf_result) # 출력: [False, True, False, True]
# NaN 확인
isnan_result = np.isnan(float_array)
print("isnan:", isnan_result) # 출력: [False, False, True, False]
# 내림 연산
floor_result = np.floor([3.7, 2.5, -1.5])
print("floor:", floor_result) # 출력: [3., 2., -2.]
NumPy의 유니버설 함수들은 배열 연산을 반복문 없이 빠르게 수행할 수 있게 도와주며, 특히 대규모 데이터에서 효율적입니다.
NumPy에서는 조건부 연산을 수행하는 다양한 함수가 있습니다. 이 중 where(), any(), all() 함수는 조건을 기반으로 특정 연산을 수행하거나 조건을 평가할 때 유용하게 사용됩니다.
조건부 함수 설명과 예제
1. where() 함수
where() 함수는 삼항 연산자와 같은 역할을 합니다. where(c, a, b)에서 조건 c가 참(True)인 경우 a를, 거짓(False)인 경우 b를 반환하여 새로운 배열을 만듭니다.
import numpy as np
array = np.array([1, 2, 3, 4, 5])
# 조건이 참인 경우 10, 거짓인 경우 원래 값을 반환
result = np.where(array > 3, 10, array)
print("where 결과:", result) # 출력: [1, 2, 3, 10, 10]
여기서 array > 3이라는 조건을 만족하는 요소들(4와 5)은 10으로 대체되고, 나머지 요소는 원래 값이 유지됩니다.
2. any() 함수
any() 함수는 배열의 요소 중 하나라도 True인 값이 있으면 True를 반환합니다. 모든 요소가 False인 경우에만 False를 반환합니다.
array = np.array([0, 0, 1, 0])
# 배열 중 하나라도 True(0이 아닌 값)인 경우 True 반환
result = np.any(array)
print("any 결과:", result) # 출력: True
3. all() 함수
all() 함수는 배열의 모든 요소가 True일 때 True를 반환하며, 하나라도 False인 요소가 있으면 False를 반환합니다.
array = np.array([1, 2, 3, 4])
# 배열의 모든 값이 True인지 확인
result = np.all(array > 0)
print("all 결과:", result) # 출력: True
4. 응용 예제
조건부 함수를 조합하여 배열에서 특정 조건을 평가하고, 값을 변경하거나 확인하는 복합적인 작업도 가능합니다.
array = np.array([1, -2, 3, -4, 5])
# 양수는 그대로, 음수는 0으로 변경
result = np.where(array > 0, array, 0)
print("양수만 유지하고 나머지는 0:", result) # 출력: [1, 0, 3, 0, 5]
# 배열에 음수가 하나라도 있는지 확인
has_negative = np.any(array < 0)
print("음수 존재 여부:", has_negative) # 출력: True
# 모든 요소가 양수인지 확인
all_positive = np.all(array > 0)
print("모든 요소가 양수인지 확인:", all_positive) # 출력: False
이와 같은 조건부 함수는 배열 내 특정 조건에 맞는 요소를 빠르게 처리하고, 조건을 만족하는지 여부를 확인할 때 유용하게 활용됩니다.
'Lecture > 파이썬으로 만드는 AI 오델로 게임' 카테고리의 다른 글
4. 파이썬을 이용한 데이터 과학 소개(part 3) (0) | 2024.11.22 |
---|---|
4. 파이썬을 이용한 데이터 과학 소개(part 2) (1) | 2024.11.20 |
3. 강화학습을 위한 순차 결정 문제 소개 (10) | 2024.11.10 |
2. 인공지능과 강화학습 소개 (2) | 2022.09.25 |
1. AI 오델로 게임 만들기 소개 (0) | 2022.09.13 |
댓글