5/15 Today I Learned

boks·2024년 5월 15일
post-thumbnail

📖 학습한 내용

  • 넘파이 복습 및 추가 학습

📖 핵심내용

📌 Numpy

함수 또는 속성

이제부터 배열 객체를 x 라고 칭함
numpy를 np라 칭함

  1. np.array()
    -> [원하는 배열] 입력
    -> 배열을 생성한다.
import numpy as np
x = np.array([1,2,3,'hi',5])

-> 이렇게 배열을 하나의 자료형으로 처리하지 않으면 dtype=object
-> 이것은 배열의 속도에서의 이점을 활용하지 못한다.

  1. x.type
    -> 배열의 자료형을 반환

  2. x.ndim / np.ndi(x)
    -> 배열의 축의 개수를 반환

  3. x.shape / np.shape(x)
    -> 배열의 크기와 차원을 반환 (튜플형식)

  4. x.size / np.size(x)
    배열의 원소 개수를 반환

  5. np.arange(n)
    -> range함수와 완벽히 같다. 아마 array range아닐까?

    시작값, 끝값, 스텝

  6. np.empty((n,m))
    -> (행, 열) 입력
    -> 행렬에 더미값이 차서 나온다

  7. np.ones((n,m))
    -> (행, 열) 입력
    -> 행렬에 1이 차서 나온다
    -> 행렬의 특성으로 원하는 수를 곱하면 원하는 수로 차있는 행렬이 완성
    -> 사실 full 함수로 원하는 행렬 만들 수 있지만 외우는 포인트를 줄이자

  1. np.zeros((n,m))
    -> (행, 열) 입력
    -> 행렬에 0이 차서 나온다

  2. np.eye((n,m))
    -> 단위행렬 만드는 함수
    -> (정수1개) 입력
    -> 입력한 정수 크기의 단위 행렬을 반환
    -> 3입력했다면 3*3 의 단위행렬이 만들어진다.

  1. x.dtype
    -> 배열의 요소의 타입을 조회

  2. x.reshape((n,m...)) / np.reshape(x, ((n,m...)))
    -> ()에 원하는 차원 입력
    -> 원하는 차원들의 곱과 배열의 요소 개수가 같다면, 원하는 차원의 배열 생성

  3. x.resize((n,m...))
    -> 원하는 차원 입력
    -> 원하는 차원들의 곱과 배열의 요소 개수가 같다면, 원본의 차원 변경

  4. x.view()
    -> x와 데이터를 공유하는 배열을 생성
    -> 생성된 배열과 x에 변화를 주면 서로 서로 영향을 받는다.

  1. x.base
    -> 어떤 배열을 원본으로 만들어진 배열x라면, 원본을 출력한다.
  1. x[n,m...]
    -> 배열의 조회하고자 하는 인덱스 입력
    -> 차원은 콤마로 구분 -> 리스트와 다르다!
    -> 배열의 해당 인덱스의 값을 반환

  2. np.T
    -> 배열을 전치한다.
    -> 1차원은 전치 할 수 없다.

    1차원 경우 예시
    arr = np.array([1,2,3,4])
    arr, arr.shape

    -> 1차원의 크기가 4이다.
    이떄 전치를 해본다면
    arrt = arr.T
    arrt, arrt.shape

    -> 전치가 일어나지 않음을 알 수 있다.

arr = np.array([[1,2,3,4]])
arr, arr.shape

arrt = arr.T
arrt, arrt.shape


-> 1차원과 2차원의 크기가 서로 바뀌었다.

18.np.transpose(x)

  • x.T와 같다.
  1. np.round(x,n)
  • 배열의 각 요소를 소숫점 n번째 자리로 반올림
  1. np.maximum(x,y)
    -> ()에 정수 또는 배열을 총 2개 입력한다.
    -> 입력한 값을 비교하여 요소 중 큰값을 반환한다.
    -> 입력 값 중 배열이 있다면 배열을 반환
x = np.array([1,2,3,4])
y = np.array([8,7,1,2])
print(np.maximum(x,y))
print(np.maximum(x,9))
print(np.maximum(7,y))
print(np.maximum(5,6))

  1. np.minimum(x,y)
    -> maximum과 똑같은 원리로 작은 값을 반환한다.

  2. np.isnan(x)
    -> 배열 x에 요소를 조회하고, nan의 인덱스에 True를 요소를 가지는 배열을 반환한다.

x=np.array([1,2,np.nan,3,np.nan])
np.isnan(x)

배열 슬라이싱

  1. x[]
    -> 차원은 콤마로 구분 -> 리스트와 다르다!
x = np.array([[1,2,0],
              [3,4,0],
              [5,6,0]])

print('1) : ',x[:,1])
print('2) : ',x[1,:])
print('3) : ',x[1,:])
print('4) : ',x[0:2,1:2])
print('5) : ',x[1,0:-1])

📖 흥미로운 점 / 새로 알게된 점

  • np.eye()
  • x.resize()
  • np.round()
  • np.minimum()
    함수를 새로 알 수 있었다. 그 외에도 각각의 배열 요소끼리 계산하는 함수를 유니버셜 함수라고 하는 것을 알았다.

📖 어려운 부분

  • 그 외에도 여러 유니버셜 함수들, 이항 유니버셜 함수, 논리함수, 산술함수, 삼각함수를 학습했다. 너무나도 많은 함수가 있어서 적재적소에 쓸 수 있을지 고민된다.
    어렵지는 않으나, 빠르게 코딩을 하려면 많은 것을 알아둬야겠다.

📖 이후 학습 계획

  • numpy는 논문을 써도 될 정도로 양이 방대하므로, 더 많이 공부해볼 생각이다.

📖 기타

  • 지피티의 시대에 과연 이렇게 공부를 하는게 맞을까 하고 의문이 들기도한다. 분명 지피티만큼 못할거라 생각이 들지만, 언제 무엇을 쓸지 아는 것은 분명 큰 도움이 될거다. 지피티로 코드를 짜는 것을 봐도, 어느 부분을 고쳐라 어떻게 고쳐라 요청을하는데 그런 부분에서도 도움이 될 것이다. 따라서 암기형식으로 외우지는 말되, 어떤 함수가 있는지와 개념을 아는게 정말 정말 중요할 것 같다. 이와 같은 생각으로 쭉 공부를 해나가자.
profile
설계엔지니어의 변신

0개의 댓글