list > numpy.ndarray 생성 및 타입 설정
list_1 = [50,30,5,56,6,65,7,4,3,63,36,4,5,6,34,55]
arr = np.array(list_1) # 여러 차원 배열도 가능
print(arr, arr.dtype, '\n')
arr = np.array(list_1, dtype='f4') # 타입 설정 가능
print(arr, arr.dtype, '\n')
arr = np.array(['abc', 'defasgbg'], dtype='S3') # 문자열 길이 제한 가능
print(arr, arr.dtype, '\n')
# 배열 안의 가장 긴 문자열을 크기를 타입으로 사용됨
arr = np.array(['a', 'ab', 'abc'], dtype=np.string_)
print(arr, arr.dtype, '\n')
# 배열 안의 가장 긴 문자열을 크기를 타입으로 사용됨
arr = np.array(['a', 'ab', 'abc'], dtype=np.unicode_)
print(arr, arr.dtype, '\n')
"""
[50 30 5 56 6 65 7 4 3 63 36 4 5 6 34 55] int32
[50. 30. 5. 56. 6. 65. 7. 4. 3. 63. 36. 4. 5. 6. 34. 55.] float32
[b'abc' b'def'] |S3
[b'a' b'ab' b'abc'] |S3
['a' 'ab' 'abc'] <U3
"""
ndarray 생성 방법
list_2 = [0,1,2,3,4,5,6,7,8,9,]
np.array(list_2) # 1차원 배열
np.array(range(10)) # 시퀸스 객체
np.array([[1,2,3], [4,5,6]]) # 2차원 배열 직접 삽입
np.arange(0, 20) # array와 range 합친 메소드
np.arange(0, 20, 2)
np.linspace(0, 10, 20) # 등분 간격 유지하는 수 배열
arr, step = np.linspace(0, 10, 20, endpoint=False, retstep=True) # 간격을 반환을 같이 받기
특수한 ndarray 생성 방법
a = np.eye(7) # 주대각선이 1이고 나머지가 0인 7x7의 대각행렬 반환
b = np.eye(5, k=-2) # 대각행렬의 대각 위치 조정
c = np.identity(3) # 단위행렬
d = np.ones((7,7)) # 7x7의 1행렬 반환
e = np.ones_like(arr1) # 특정 배열의 형태대로 1행렬 반환
f = np.zeros(8) # 8x8의 영행렬 반환
g = np.zeros_like(arr1) # 특정 배열의 형태대로 영행렬 반환
h = np.full((2,3), 5) # 2x3의 5행렬 반환
i = np.full_like(arr1, 5) # 특정 배열의 형태대로 5행렬 반환
j = np.diag(arr1) # 1차원 배열 인자 -> 대각행렬로 반환
k = np.diag(arr3) # 2차원 배열 인자 -> 주대각선 성분 추출 반환
난수 생성 및 활용 방법
np.random.seed(2) # 난수 고정
np.arange(25).reshape(5,5)
np.random.seed(123) # 랜덤 시드로 숫자 고정
np.random.rand(20) # 정수 난수 - 20개의 배열 반환
np.random.rand(3, 3) # 정수 난수 - 행렬 3x3 의 배열 반환
# 정수 난수 생성
# np.ranodm.randint(low, high, size, dtype)
np.random.randint(1, 50) # 랜덤 정수 - 1~50 사이의 수 1개 정수 반환
np.random.randint(1, 100, 15) # 랜덤 정수 - 1~100 사이의 수 15개 배열 반환
# 실수 난수 생성
np.random.rand() # 1개 난수 반환
np.random.random_sample(10)
np.random.random(10)
np.random.ranf(10)
np.random.sample(10)
# 1차원 배열 랜덤 샘플링
np.random.choice(range(4), 15, replace=True, p=[0.3, 0.2, 0.1, 0.4])
np.random.choice(6, 15)
# 배열 순서 섞기
np.random.shuffle(arr)
np.random.permutation(arr)
반복으로 ndarray 생성
arr = [0, 1, 2]
np.repeat(arr, 3) # [0 0 0 1 1 1 2 2 2]
np.repeat(range(3), 3) # [0 0 0 1 1 1 2 2 2]
arr = [[1,2], [3,4]]
np.repeat(arr, [1,5], axis=0)
"""
[[1 2]
[3 4]
[3 4]
[3 4]
[3 4]
[3 4]]
"""
ndarray 정보 확인
x = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype='i2')
print(x, '\n')
print(f'배열 타입 확인 {type(x)}')
print(f'배열 차원 확인 {x.ndim}')
print(f'배열 원소 개수 확인 {x.size}')
print(f'배열 모양 확인 {x.shape}')
print(f'각 배열 요소의 바이트 수 {x.itemsize}')
print(f'배열의 메모리 크기 {x.nbytes} \n')
np.info(x) # 배열 종합 정보 확인
ndarray 수정
x = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype='i2')
x.reshape(1,9) # 배열 shape 조정
x.astype(np.float32) # 배열의 요소들의 타입 지정
x.resize((2,3)) # 배열의 사이즈 조정, slicing도 가능
x.flatten() # 1차원 배열 반환 (메모리 저장)
x.ravel() # 1차원 배열 반환 (메모리 참조)
ndarray 추가, 수정, 삭제, 복사
arr = np.array(range(1,4))
print(arr)
# np.append(array, new_value, [axis])
arr1 = np.append(arr, 4)
arr2 = np.append(arr, [4,5,6])
print(arr1)
print(arr2)
# np.insert(array, index, new_value. [axis])
arr3 = np.insert(arr, 0, 100)
arr4 = np.insert(arr, 0, [1,2,3])
print(arr3)
print(arr4)
# np.delete(array, index)
arr5 = np.delete(arr, 0)
print(arr5)
# np.copy(array)
arr1 = np.copy(arr)
x = np.arange(1,17).reshape(4,4)
y = x.copy()
# np.concatenate((array, array), axis)
cat = np.concatenate((x,y))
print(cat)
cat = np.concatenate((x,y), axis=1)
print(cat)
댓글