object는 data와 method를 가지고 있음special methods는 컴퓨터가 쓰려고 만든 method같은 special method라도 object type에 따라서 다르게 동작한다ndarray에서의 \_\_add\_\_함수는 vector의 element
python, built-in library <-(import) Numpy, matplotlib, opencv, NLTK만약 sum이라는 함수가 존재할 때 python내부, library1, library2 어디의 sum인지 모름. 그래서 namespace를 만들
스칼라 텐서는 하나의 값을 다룸 (0차원텐서, zero's order tensor)스칼라값 하나라도 우리는 ndarray라는 생각을 가지고 있어야 한다 ()벡터는 스칼라를 모아서 만듦즉, 스칼라 ndarray를 모아서 벡터 ndarray를 만듦 (m,)벡터들을 모으면
리스트, 튜플, 딕셔너리로부터 기본적인 ndarray 생성가능import numpy as npvec_py = 1,2,3vec_np = np.array(vec_py)print(type(vec_py), type(vec_np)) print(vec_py, vec_np, sep

어떤 데이터를 초기화할때 많이 사용하는 방법 중 하나이다 (ex. one hot encoding)덧셈초기화는 0, 곱셈초기화는 1만약 0,1이 아닌 다른 값으로 초기화 하고 싶은 경우 numpy.full 사용numpy.empty는 이전 메모리에서 사용했던 값을 그대로

range와는 다르게 arange(advanced range)는 소수점도 사용할 수 있음처음점과 끝점을 포함함 (endpoint = False로 바꿀 수 있음)a = np.linspace(1,10,100,2,20,200,5) 는 1-2까지 10-20까지 100-200까

numpy.random.randn(평균 0, 표준편차 1) , numpy.random.normal 두 가지 함수사용print(random_values.shape)

shape은 디버깅하기 좋은 api이다. 알고리즘 검정을 meta-data api들로 검정해보기

int8 -> 8bit -> 256개의 수 표현가능tenserflow는 기본적으로 float32 사용np.array를 만들때 명시적으로 dtype을 정할 수 있음int8_np = np.array(1.5, 2.5, 3.5, dtype = np.int8) 같은 경우는 소수

shape은 tensor연산에서 중요한 역할을 한다. (1) numpy.reshape(2) ndarray.reshape타깃이 되는 array.reshape해주면 됌
row 나 column의 개수를 강조할때 사용가능함

reshape과 resize의 가장 큰 차이점은 원소의 개수가 달라질때 오류가 뜨는지 아니면 원소를 채워주는지이다. np.reshape이 조금 더 안전한 api이다. ( 오류가 뜨기 때문 )in-place라는 것은 그 자체를 돌려준다는 것이다. return값이 없다.

N0 N1 N2 순으로 flatten이 진행된다인덱싱,flatten, reshape 할때도 바깥쪽 차원에서부터 진행된다ravel도 tensor를 받아서 vector로 만들어주는 api이다.

copy : 원본에 영향을 미치면 안될때view : 원본에 영향을 미쳐도 될때넘파이의 slicing은 view를 만드는것이다. 그래서 원본에도 영향을 미친다view인지 copy인지 구분하는 것이 바로 base이다하지만 모든 경우를 커버하지는 못한다view를 통해 만들어
data type을 바꾸어주는 api\-3을 bool에서 바꾸어줄때 true가 되는것. -3 == True 는 false임.astype(bool)로 바꾸어준 다음에 비교해야함
int, float와 bool == , != 연산시 typecast가 필요한 경우가 있다원소별 연산으로 for문없이 연산시 속도면에서 장점이 있다
차원이 다를때는 어떠한 차이점이 있는지, 브로드캐스팅 이용시 어떠한 장점이 있는지, 어떠한 효율성이 있는지, 조심해야될 점은 무엇인지브로드캐스팅은 편리하게 만들어주는 기능임, 그러나 가장 조심해야될 부분이 된다브로드캐스팅은 서로 쉐입이 다를 경우에도 연산이 가능하게 해

차원이 1이여야 함(3,3) + (3,1)(3,3) + (1,3)(3,1) + (1,3)

1 ndim이 2일 때의 브로드캐스팅

1 When ndims Are Not Equal
슬라이싱을 통해 내가 원하는 위치에 값들을 수정할 수 있다

: 는 그 차원에 대해서 모든 값을 가져오라는 뜻... 은 뒤따르는 모든 차원을 가져오라는 뜻

[1] Indexing and slicing 3rd Order Tensor ndarrays

indices = np.array(1,2,3, 5,8,9)print(f"indices: \\n{indices}")

True는 이 값을 뽑겠다, False는 이 값을 뽑지 않겠다를 의미함a와 b_indices의 shape이 동일해야 함행렬 케이스에서는 결과를 벡터로 만든다np.nonzero, np.where은 boolean값일 경우에 True인 값들의 인덱스를 반환함

( 2, 3, 4 ) 를 keepdims를 안했을경우 ( 3, 4 )keepdims를 했을 경우 ( 1, 3, 4 )가 된다(2,3,4) -> (2,4) or (2,1,4)(2,4)일때는 브로드캐스팅 불가(2,1,4)일때는 브로드캐스팅 가능