import numpy as np
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)
arr2 = np.array([[1,2,3,4],[5,6,7,8]])
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)
print("=======ndim 차원수 출력")
print(arr1.ndim) # 1차원
print(arr2.ndim) # 2차원
print(arr3.ndim) # 3차원
print("=======shape : 차원수, 행수, 열수 출력")
print(arr1.shape)
print(arr2.shape)
print(arr3.shape)
print("=======size : 배열이 갖고 있는 원소 수")
print(arr1.size)
print(arr2.size)
print(arr3.size)
print("=======dtype 배열이 가지고 있는 원소의 데이터 타입")
print(arr1.dtype)
print(arr2.dtype)
print(arr3.dtype)
np.zeros((3,4))
np.ones((2,3,4))
np.full((2,2),3)
print("======= 0으로 채워진 행렬")
print(np.zeros_like(arr2))
print("======= 1으로 채워진 행렬")
print(np.ones_like(arr2))
print("======= i (여기서는 3 으로 입력)로 채워진 행렬")
print(np.full_like(arr2,3))
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]
arr1 = np.array([1,2,3,4])
print("===========2차원 배열 인덱싱")
arr2 = np.array([[1,2,3,4,],
[5,6,7,8]])
#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)
arr1 = np.random.randint(-10,10,(3,4))
print("===arr1 : -10 ~10 사이의 정수로 (3,4) 모양의 배열")
print(arr1)
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)
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)
#d = a[1:4] # [2, 3, 4] # 1보다 크고 4까지
#e = a[:3] # [1, 2, 3] # 3까지
#f = a[3:] # [4, 5] # 3보다 큰 값만.
#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)
print("==== 3. arr2에서 [6,7][10,11] 처럼 나오게 인덱싱")
b = arr2[1:3, 1:3]
print(b)
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)