[NumPy] Ch1. N차원 배열 생성
1-1. N차원 배열 생성하기
배열 생성하기
np.array(): 넘파이 배열 생성
arr = np.array([1, 2, 3])
넘파이 배열 관련 정보 확인
arr.shape: 모양 확인
arr.ndim: 차원 확인
arr.size: 크기 확인
파이썬 array와 넘파이 array의 type() 차이점
- 파이썬 array: <class ‘list’>
- 넘파이 array: <class ‘numpy.ndarray’>
1-2. N차원 배열의 데이터 타입
데이터 타입 확인
arr.dtype: 데이터 타입 확인
arr = np.array([1, 2, 3]) # 자동으로 데이터 인식
print(arr, arr.dtype) # 출력값: [1 2 3] int64
arr = np.array([1, 2, 3], dtype=np.float) # 지정
print(arr, arr.dtype) # 출력값: [1. 2. 3.] float64
- 데이터 타입을 명시하지 않은 경우 넘파이 알아서 가장 적합한 데이터 타입으로 설정됨
- 출력값의 자료형 뒤의 숫자는 메모리에서 차지하는 크기를 나타냄
- int형, float형이 공존한다면 float형으로 맞춰짐
데이터 타입 변환
arr.astype: 데이터 타입 변환
arr = np.array([1, 2, 3, 4]) # 자료형: int64
print(arr, arr.dtype) # 출력값: [1 2 3 4] int64
arr = arr.astype(np.float32)
print(arr, arr.dtype) # 출력값: [1 2 3 4] float32
파이썬 리스트와 넘파이 리스트와 다른 점
- 파이썬 리스트: 다영한 데이터 타입 허용
- 넘파이 리스트: 단일 데이터 타입만 허용
1-3. 정해진 형식의 N차원 배열 생성하기
정해진 형식의 N차원 배열 생성(1)
np.zeros(): 모든 원소가 0으로 된 배열 생성, 매개변수는 shape
np.ones(): 모든 원소가 1으로 된 배열 생성, 매개변수는 shape
np.full(): 모든 원소가 n으로 된 배열 생성, 매개변수는 shape, n
np.eye(): 행(m), 열(n)인 경우 m * n, 대각 원소가 1인 행렬 생성
- k: 대각 원소 시작 지점 설정
arr = np.zeros([2, 2])
arr = np.ones([3, 5])
arr = np.full([3, 3], 7)
arr = np.eye(3, 4)
arr = np.eye(3, 4, k=1) # k: 대각 원소 시작 지점 지정
정해진 형식의 N차원 배열 생성(2)
np.zeros_like(): 원래의 배열과 동일한 shape을 가짐, 원소 모두 0인 행렬 생성
np.ones_like(): 위와 동일, 모든 원소 1로 설정
np.full_like(): 위와 동일, 모든 원소 n으로 설정 (인자 하나 더 필요)
1-4. 특정 범위의 값을 가지는 N차원 배열 생성하기
특정 범위 지정
np.arange(start, stop, step)
- start: 시작 위치
- stop: 끝 위치(-1 까지 진행)
- step: 간격(default 1)
arr = np.arange(9) # stop
arr = np.arange(3, 13) # start, stop
arr = np.arange(4, 13, 3) # step 지정
arr = np.arange(stop=13, step=3, start=4) # 위와 동일
균등한 간격 지정
np.linspace()
arr = np.linspace(0, 100, 12) # 0부터 100까지 12개의 원소가 균등한 간격으로 출력
np.arange(), np.linspace()의 차이점
- arange의 stop: stop미만까지가 범위
- linspace의 stop: stop를 포함한 범위
np.logspace(): 밑이 base인 로그 스케일의 값
arr = np.logspace(1, 10, 10, base=2) # 밑이 2인 로그 스케일
arr = np.logspace(1, 10, 10) # base 지정 안할 시 상용로그 스케일
1-5. 난수로 이루어진 N차원 배열 생성하기
random 모듈 이용
np.random.normal(loc, scale, size): 정규 분포의 확률 밀도에서 표본 추출
- loc: 정규분포의 평균
- scale: 표준편차
- size: 추출할 표본의 개수(행렬 가능)
np.random.rand(): 0~1 숫자를 균등한 비율로 추출
- rand의 인자: 표본의 개수
np.random.randn(): -1~1의 범위를 정규분포로 출력, 즉 가오시안 분포의 표본 추출
- randn의 인자: 표본의 개수
np.random.randint(low, high, size): 랜덤한 정수 추출
- low: low 부터의 범위
- high: high 미만의 범위
- size: 표본의 개수
1-6. 시드(seed)값을 통한 난수 생성 제어
시드(seed)값 설정
시드를 고정하고 rand() 값을 출력하면 동일한 값이 나옴
np.random.seed(1) # 시드 값 고정
arr = np.random.rand(10)
print("random num1: ", arr)
np.random.seed(1) # 시드 값 고정
arr = np.random.rand(10)
print("random num2: ", arr)
위의 출력결과는 동일