https://numpy.org/ : numpy의 리소스가 많이 있음.
Numerical Python
행렬과 매트릭스를 코드에서 잘 사용하기 위해 Numpy가 필요하다
list로 행렬을 표현 시 어떤 것으로 써도 별 차이 없을 수 있지만, 몇백만개가 들어갔을 때 문제가 달라진다./ 데이터가 많아지면, 내부적으로 각각의 메모리 할당을 해줘야하기 때문에 비실용적이다.
그런 문제를 해결 하기 위해 "행렬과 매트릭스를 코드에서 잘 사용하기 위해 Numpy가 필요하다"
ndarray안에 list들어간 것처럼 표현해줘야 한다
ndarray는 생성 할 때 마다 데이터 타입인지 지정을 해줘야 한다
Python의 list 사용하기는 매우 편하고 좋지만 느리다, 메모리를 목적에 맞게 사용하지만, Numerical Calculation(숫자계산)하기에는 비효율적이다
Dynamic Typing 포기를 함으로, 모든 array(배열)는 똑같은 종류의 데이터만 들어가야만 한다.
list에 여러가지 타입이 들어갔다고 하더라도 해당 타입으로 자동 변환을 시도한다
문자열이 들어가면 에러가 나고, 지정해준 타입으로 초기화 한다
다른 타입으로 작성했더라도 지정해준 타입으로 1차적으로 변환을 시도한다. 초기화 한다
ndarray로 함수로 초기화 된 array는 타입이 전부 다 ndarray이다
np.dtype : ndarray의 데이터 타입을 리턴한다
np.shape : ndarray의 데이터 dimention을 리턴한다
"," 다음 것이 없다라는 뜻이며, shape은 항상 튜플이의 형식을 띄고 있다

0차원 : scalar(스칼라)
1차원 배열 : vector(벡터)
2차원 배열 : matrix(매트릭스) - 행렬
3차원 배열 : 3-tensor(텐서) - 행렬이 여러개 겹쳐있는 경우
n차원 배열 : n-tensor(텐서)
1차원 배열을 나열한 것
ndarray의 shape는 ndarray(배열)의 갯수로 나타낸다. = (4, )
2차원 배열의 나열한 것
(행, 열) = ( y, x ) = y(세로방향), x(가로방향)
axis = 0, 1
dtype에 아무것도 없으면 float이다 **
3차원 행렬이다
matrix가 여러개 겹쳐있는 것이다
( 축, 행, 열 ) = ( z, y, x ) = ( z(축의 방향), y( 세로방향 ), x( 가로방향 ) )
축(z) = 겹쳐져서 안 보이는 배열을 0으로 시작한다 ( 예시 : 0, 1, 2 )
axis = 0, 1, 2
4차원 예시 : ( 0, z, y, x) 뒤에 z, y, x가 고정된다
np.ndim : ndarray(tensor)의 차원을 리턴
np.size : ndarray(tensor)의 갯수
int, float의 기본 bit는 64비트이다
8개를 묶어서 byte라고 한다
bytes로 부를 수 있는 것은 0~(16진수로)ff까지이며, bytes의 총 갯 수는 256개이다 ( 0 ~ 255까지 )
integer 하나를 나타내는 데 필요한 bytes는 8바이트이다
tensor.size : tensor의 갯수
tensor.nbytes : integer하나 당 필요한 8바이트 x tensor의 갯수 = tensor.nbytes이다

numpy 사이트 들어가서 보는 것이 정확하다 ( 계속 버전이 업그레이드 되기 때문에 )
Unsigned Integer는 데이터가 +로만 이루어져 있고, "-" 데이터가 없는 경우 굳이 메모리 한개를 버릴 필요가 없기 때문에, uint type으로 사용한다.
bytes를 모르는 경우 void로 사용
>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], int).nbytes #np.int6464 bit = 8 bytes; 8 bytes * 9 = 72 bytes>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], np.int32).nbytes32 bit = 4 bytes; 4bytes * 9 = 36 bytes>> np.array([[1, 2, 3],[4.0, 5.0, 6.0],["7", "8", "9"]], float).nbytes #np.float6464 bit = 8 bytes; 8 bytes * 9 = 72 bytes