python_numpy2응용

ssancho·2024년 5월 8일

python

목록 보기
25/26

학원 실습 1. ndArray

import numpy as np

ndArray 생성

np.array([1,2,3,4])

arr = [1,2,3,4] # 파이썬 리스트
arr1 = np.array([1,2,3,4]) # 넘파이 ndArray

print("=======type : 배열의 구조타입출력")
print(type(arr))
print(type(arr1))

print(arr)
print(arr1)

학원 실습2 . 2차원 ndArray 생성

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

3차원 ndArray 생성

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

print("=========== arr2 저장된 값 출력")
print(arr2)
print("=========== arr3 저장된 값 출력")
print(arr3)

ndArray.ndim : 배열의 차원 수 or 배열의 축 수

print("=======ndim 차원수 출력")
print(arr1.ndim) # 1차원
print(arr2.ndim) # 2차원
print(arr3.ndim) # 3차원

ndArray.shape :

print("=======shape : 차원수, 행수, 열수 출력")
print(arr1.shape)
print(arr2.shape)
print(arr3.shape)

print("=======size : 배열이 갖고 있는 원소 수")

ndArray.size :

print(arr1.size)
print(arr2.size)
print(arr3.size)
print("=======dtype 배열이 가지고 있는 원소의 데이터 타입")

ndArray.type

print(arr1.dtype)
print(arr2.dtype)
print(arr3.dtype)

배열 생성 함수

0으로 채워진 행렬

np.zeros((3,4))

1로 채워진 행렬

np.ones((2,3,4))

i로 채워진 행렬

np.full((2,2),3)

like => 다른 배열의 모양을 본따서

print("======= 0으로 채워진 행렬")
print(np.zeros_like(arr2))
print("======= 1으로 채워진 행렬")
print(np.ones_like(arr2))
print("======= i (여기서는 3 으로 입력)로 채워진 행렬")
print(np.full_like(arr2,3))

random => 난수

np.random.seed(1) # 최초 난수 생성 기준
np.random.randint(-100,100,(2,3)) # -100 ~ 100 사이에 있는 정수로 2 * 3 행렬 생성

np.random.randint(0,10,(2,2,3)) # 0 ~ 10 사이에 있는 정수로 2 2 3 행렬 생성

인덱싱

li = [1,2,3,4]

print(li[1])

print(li[0:2])

1차원 배열의 인덱싱

arr1 = np.array([1,2,3,4])

print(arr1[0]) # 한 개 접근

print("===========1차원 배열 인덱싱")

print(arr1[0:3:2])

print(arr1[0::])

print(arr1[:2:])

arr1[시작:끝:보폭]

print("===========2차원 배열 인덱싱")

2차원 배열의 인덱싱

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

print(arr2[0,1]) # 행, 열 두 개의 정보가 필요함

print(arr2[1,1])

print("======")

print(arr2[::,::])

print(arr2[0:2:,1:3:]) # 0행 ~ 1행 까지 선택, 1열~2열 선택

fancy 인덱싱 => 원하는 인덱스를 배열로 넘겨준다

#1차원
arr1[[0,1,3]]
print(arr1)
print(arr1[[0,1,3]])

#2차원
arr2[[0,1],[1,3]]

print("==========논리값 인덱싱")
arr1[[True,False,True,False]]
print(arr1)
print(arr1[[True,False,True,False]])
arr4 = arr1 > 2
print(arr4)

-10 ~10 사이의 정수로 (3,4) 모양의 배열을 만들고 arr1에 저장

arr1 = np.random.randint(-10,10,(3,4))

print("===arr1 : -10 ~10 사이의 정수로 (3,4) 모양의 배열")
print(arr1)

아래와 같은 2차원 배열을 만들고 arr2에 저장

1,2,3,4

5,6,7,8

9,10,11,12

13,14,15,16

arr2 = np.array([[1,2,3,4],[5,6,7,8],
[9,10,11,12],[13,14,15,16] ])

print("===arr2 : 4*4 2차원 배열")
print(arr2)

1. 각 배열의 차원, 모양, 원소의 갯수를 확인

print("==== 1. 각 배열의 차원, 모양, 원소의 갯수를 확인")
print("=======ndim 차원수 출력")
print(arr1.ndim) # 1차원
print(arr2.ndim) # 2차원

print("=======shape : 모양구조(차원수, 행수, 열수 출력)")
print(arr1.shape)
print(arr2.shape)

print("=======size : 배열이 갖고 있는 원소 수")
print(arr1.size)
print(arr2.size)

2. arr1에서 행은 모두 출력하고 열은 첫번째, 세번째만 출력

샘플

#d = a[1:4] # [2, 3, 4] # 1보다 크고 4까지
#e = a[:3] # [1, 2, 3] # 3까지
#f = a[3:] # [4, 5] # 3보다 큰 값만.

다차원 NumPy 배열에서는 각 차원의 인덱스를 콤마로 구분하여 인덱싱할 수 있습니다.

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

인덱싱 (배열의 좌표값에 있는 값 표시)

#b = a[0, 0] # 1
#c = a[1, 2] # 6

슬라이싱 ( 잘라 가져오기 ) 중요. 중요.

#d = a[0, 1:3] # [2, 3] : 1행(첫번째 행)의 2열부터 3열까지
#e = a[:, 1] # [2, 5] : 모든 행(1행, 2행)의 2열 모두
#f = a[:, :2] # [[1, 2], [4, 5]] : 모든 행(1행, 2행)의 1열부터 2열까지 모두.

print("==== 2. arr1에서 행은 모두 출력하고 열은 첫번째, 세번째만 출력")
a = arr1[::, 0:3:2]
print(a)

3. arr2에서 아래처럼 나오게 인덱싱해주세요

[6, 7] : 2행의 2열 3열값

[10, 11] : 3행의 2열 3열값

print("==== 3. arr2에서 [6,7][10,11] 처럼 나오게 인덱싱")
b = arr2[1:3, 1:3]
print(b)

4. arr1에서 음수만 출력

print("==== 4. arr1에서 음수만 출력1")
c = arr1[arr1 < 0]
print(c)
print("==== 4. arr1에서 음수만 출력, 양수는 0 처리. 2 np.where()사용")
d = np.where(arr1 < 0, arr1, 0)
print(d)

profile
Ssancho

0개의 댓글