numpy

adam2·2021년 8월 7일
0

넘파이

2차원의 데이터를 처리할때는 판다스가 더 정신건강에 이롭다.

ndarray

  • N차원 배열 객체
    1차원
    array: [1,2,3] shape:(3,)
    2차원
    array:[[][]] shape :(2,3)

  • ndarray내 데이터 값은 같은 타입만 들어가있어야 함.

astype()

  • 타입변환
  • 대용량 데이터를 ndarray로 만들 때 메모리 절약을 위해 자주 사용. 대용량 데이터 다룰 시 메모리 절약을 위해 형변환을 특히 고려해야함
    • ex) 0,1,2와 같이 크지 않은 범위 숫자를 위해 64bit float형보다는 8,16bit integer형으로 변환

axis축

  • 1차원
    행=0

  • 2차원
    열=0
    행=1

  • 3차원
    높이=0
    열=1
    행=2

# ndarray 데이터값 타입
print(array1, array1.dtype)

list2 = [1,2,'ㅣㅑㄴㅅ'] #리스트는 서로 다른 데이터타입이 올 수 있다
array2 = np.array(list2)
print(array2, array2.dtype)

list3=[1,2,3.0]
array3 = np.array(list3)
print(array3, array3.dtype)

#[1 2 3] int64
#['1' '2' 'ㅣㅑㄴㅅ'] <U21
#[1. 2. 3.] float64

arange(n)

  • 0부터 n-1까지의 수를 가진 length=n인 일차원 배열 생성
  • arange(3) =[0,1,2]

zeros((n,m), dtype={type})

  • 모든 원소가 0(숫자형일경우, 나머지 타입에 대한 zero value가 들어감)이고 type이 type인 n,m배열 생성
  • type default is numpy.float64.

ones((n,m))

  • zero와 비슷하게 1의값으로 채워준다.

reshape()

  • ndarray를 특정 차원 및 형태로 변환.
  • -1이 들어가면 -1에 해당하는 axis는 가변적이고, 나머지 axis는 해당 숫자로 크기가 고정되도록 출력된다.
    • reshape(-1,1), reshape(-1,)형태로 많이 사용한다.
    • -1은 1개만 사용할 수 있다.
array1 = np.arange(10)
reshape=array1.reshape(2,5)
print(reshape)
[[0 1 2 3 4]
 [5 6 7 8 9]]


# -1이 들어가면 -1에 해당하는 axis는 가변적이고, 나머지 axis는 해당 숫자로 크기가 고정되도록 출력된다.
print(array1.reshape(-1,5))
[[0 1 2 3 4]
 [5 6 7 8 9]]

print(array1.reshape(-1,2))
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
 
 # 1차원 -> 2차원
print(array1.reshape(-1,1))
[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]]
 
  # 1차원으로 변환
 print(array1.reshape(-1,))
[0 1 2 3 4 5 6 7 8 9]

ndarray indexing

  1. 특정위치의 단일값 추출
    • arr[i]
    • 일반적인 인덱스로 배열값 불러오는것
  2. 슬라이싱
    • arr[n:m]
    • ndarray의 n번째부터 m-1번째 인덱스까지 짤라서 반환
  3. fancy 인덱싱
    • arr[[n,m,i]], arr[[d,g],[s,a]]
    • 리스트, ndarray로 인덱스 집합을 넣으면 인덱스에 해당하는 원소들을 뽑아서 ndarray로 반환한다.
  4. boolean 인덱싱
  • 조건문을 이용해 해당 조건에 일치하는 원소만 리턴. js의 array.filter()와 같다.
#단일값 추출
arr = np.arange(10)
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])

print(arr[-1]) //9
print(arr[3]) //3

print(arr2[0,0]) //1
print(arr2[1,2]) // 6

# 슬라이싱
print(arr[0:3])
print(arr[2:])
print(arr[:])
print(arr[:7])
[0 1 2]
[2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6]

print(arr2[0:2,0:2])
[[1 2]
 [4 5]]
print(arr2[:,:])
[[1 2 3]
 [4 5 6]
 [7 8 9]]
print(arr2[2:, 2:])
[[9]]
print(arr2[2:,0])
[7]

# 펜시 인덱싱
print(arr2[[0,1],2])
[3 6]
print(arr2[[0,1],:2])
[[1 2]
 [4 5]]
print(arr2[[1,2],[2]])
[6 9]
print(arr2[[1,2]])
[[4 5 6]
 [7 8 9]]

# 불린 인덱싱
print(arr[arr2%2==0])
[0 2 4 6 8]
print(arr2[arr>5])
[6 7 8 9]

booleanIndex = arr>5
print(arr2[booleanIndex])
[False False False False False False  True  True  True  True]
[6 7 8 9]

sort

np.sort(arr)

  • 원본 행렬 arr이 정렬되는게 아니라 정렬된 새로운 배열을 반환

arr.sort()

  • arr자체를 정렬한다. 리턴값 없음

두개모두 기본적으로 오름차순으로 정렬한다.
내림차순 정렬을 하기 위해서는 np.sort()[::-1], arr.sort()[::-1] 형식으로 사용

2차원 이상에서 axis기반의 sort

arr2 = np.array([[3,5],[9,2]])
print(np.sort(arr2,axis=0))#열 기반으로 소팅[3,9]소팅, [5,2]소팅
[[3 2]
 [9 5]]
print(np.sort(arr2, axis=1))
[[3 5]
 [2 9]]
 

argsort()

  • 정렬된 행렬의 원본 인덱스 행렬을 반환한다.
  • key-value형태를 매핑할때 2개의 array로 만들어서 argsort를 이용해 인덱스로 같은 키,벨류에 접근할때 자주 쓰임

선형대수

np.dot(A,B)

  • 행렬의 곱셈 AxB

np.transpose(A)

  • 전치 행렬
A=[1,2			A`=[1,3
   3,4]                     2,4]

0개의 댓글