본문 바로가기
AI/- Library

[Numpy] ndarray 생성, 추가, 수정, 삭제

by Yoojacha 2023. 2. 11.

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)   

'AI > - Library' 카테고리의 다른 글

[ Pandas ] 시계열 데이터  (0) 2023.02.17
[Pandas] 연산 방법 정리  (0) 2023.02.16
[Numpy] 연산 방법 정리  (0) 2023.02.16
[Numpy] ndarray 인덱싱, 슬라이싱, 정렬  (0) 2023.02.16
[Pandas] 데이터 전처리 기초 정리  (0) 2023.02.16
[Pandas] - 기초, 인덱싱  (0) 2023.02.15

댓글