ndarray
pandas를 쓰다보면 늘 함께 다루게되는 ndarray. (늘 에러메시지와 만나는 친구..)
array는 생소한 개념이 아니므로 특이점 위주로만 살펴보려한다.
ndarray는 여러 타입이 섞일 수 없다.
list의 경우는 여러 타입이 섞여도 되므로 [1, 2, 'text'] 같은 형태가 가능하다.
그러나 ndarray는 이게 허용되지 않고, 자동으로 ['1', '2', 'text'] 형태로 바뀐다.
arange(range)
array + range를 arange로 쓴다.
np.arange(5) 을 하면 [0, 1, 2, 3, 4] 가 생성된다.
zeros, ones
직관적이다. shape을 주면 0, 1로 가득 채운다.
reshape (★)
사이즈를 변경해준다. 다만 원본과 변환의 element 수는 같아야 한다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]을 reshape(2, 5) 하면 [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]가 된다.
차원을 고정하려면 동적으로 reshape(-1, 5)를 줘도 같은 결과가 나온다. (2차원)
reshape(-1, )로 주면 무조건 1차원이 나온다.
fancy indexing
기본 인덱싱은 많이 써봤으니 패스. 이건 특별하진 않은데 이렇게도 쓸수있구나 싶다.
2차원 배열이 있을 때, array[[0, 2], 0:3] 이런식으로 쓰면
1, 3번째 행의 0, 1, 2열이 선택된다.
boolean indexing (★)
이미 pandas쓰면서 많이 쓰고있으니 패스.
True, False로 이루어진 ndarray를 넣으면 True에 해당하는 것만 반환한다.
sort
디폴트는 오름차순 정렬.
내림차순 원하면 np.sort()[::-1]로 쓰면 된다고 한다.
어짜피 sorting 방법은 많은지라 불편해서 이렇게 안쓰게 될 것 같긴한다.
np.sort(array)로 하면 inplace=False, array.sort()로 하면 inplace=True
argsort (★)
값이 아닌 정렬된 인덱스를 반환함.
선형대수 함수로 dot(내적), transpose(전치) 등등이 있긴한데 필요할때 찾아서 쓰면될듯.
※ 인덱싱 관련
[::-1]이 왜 reverse인지 궁금해서 찾아봤다.
일단 기본적으로 인덱스에 음수를 쓰는 것에 대해 살펴보면 음수는 뒤에서부터를 뜻한다.
a[-1] # a의 마지막 값
a[-2:] # a의 마지막 값 2개
a[:-2] # a의 맨 뒤의 2개 제외하고 모두
그리고 인덱싱은 크게 세 부분으로 구성된다.
a[start:stop:step]
step은 잘 안쓰긴 하는데 디폴트로 1이고 -1로 주면 reverse를 뜻한다.
즉 a[::-1]은 a[:]의 역방향이라고 보면 된다.
a[1::-1]도 어렵지 않다. 1부터 시작해서 역방향이니 앞의 두 개를 뜻한다.