push and sleep 2021. 5. 7. 14:27

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부터 시작해서 역방향이니 앞의 두 개를 뜻한다.