AtCoder에서 numby를 사용하려고 합니다.
numby를 사용하고 싶은 이유.
매일 자신의 연구에서 측정 실험을 하여 excel의 데이터 정리, 분석의 경계를 느꼈다.어쩔 수 없이python 학습에 착수하는 과정에서nupy가 과학기술 분야에서 광범위하게 사용되고 있음을 알게 되었습니다.때로는 이미지 처리도 하지만, 그곳에서 사용하는 오픈 CV도 반드시 numby가 필요합니다.자신이 하고 싶은 데이터 분석은 대부분 numby의 방송을 이용하여 배열의 정수배와 덧셈 뺄셈을 하면 되지만 가끔은 다른 분석을 하고 싶은 일도 있다.그때도 기본적으로 numby의 함수로 해결되었다.
프로그램을 더 배우고 싶어 nump에 익숙해지려고 AtCoder를 시작했어요.해설 기사에서는 넘비가 빠르다는 것을 자주 보지만, 실제로 앳코더에서는 넘비를 쓰는 사람이 많지 않은 것 같다.자신이 열광하는 C질문 D질문 이후 다른 사람의 답변을 보면 대부분 피피에서 제기됐다.pypy와 numby를 동시에 사용할 수 없기 때문에 고속화 목적에서 많은 사람들이 pypy를 선택한 것 같다.문제에 따라python의 해답 예 자체가 매우 적고python을 사용하는 사람들도numba의 JIT/AOT에서 고속화되어 numby를 사용하여 문제를 해답하는 사람이 많지 않다.처음에는 공부를 위한 줄 알았는데 참고로 답이 드물었다.numby를 사용할 때 어느 정도 자신이 고려하지 않으면 안 된다.나는 매번 for문while문을numby 함수로 어떻게 처리해야 할지 고민하고 있다.가끔은 이렇게 편리한 함수가 존재하는데, 이런 발견을 할 때 매우 즐겁다.
numby의 주의점
요소를 자주 추가하거나 삭제하면psyhon의list, set을 사용합니다.for문에서 원소 수가 다른numby를 배열할 때마다 느리다.np.Stack 함수로 여러 개의 numby 배열을 조합한 경우 원시 배열이 크면 메모리의 확보에도 시간이 필요합니까?만약 배열 사이즈를 알고 있다면 처음부터 소수의 배열을 초기화하고 준비하는 것이 가장 좋다.
가끔 일부 요소가 일정하지 않은 문제에 부딪힐 수 있다.어떻게든 numby로 처리하려면 위원소를 추가한 후 numby 배열 등을 해야 한다.
큰 배열의 일부 요소에만 접근하면,numby는 느려집니다.for문에서 현재화하다.numby를 사용할 때 전체 배열의 계산을 업데이트하는 데 주의해야 합니다.
list가 더 빨리 처리되더라도numby와list의 전환은 시간이 필요하기 때문에 for문에서 변경하지 않는 것이 좋습니다.중도에서 마지막으로 몇 번만 바꾸는 처리를 고려하다.
원래 for문을 사용하지 않아도 numby를 사용할 수 있기 때문에 numby는 10^5번 사용하는 for문은 numby를 사용하지 않는 것이 좋습니다.하지만 어쩔 수 없이 사용해야 하는 상황이 벌어졌다.numby는 10^4대에 배열되어 있고 for문에서 10^3회 반복하면 10^7회 연산이 불안해 보이지만 의외의 속도가 빠르다.나는 이런 코드를 통과하면 넘비가 대단하다고 생각한다.
문자열도 numby에 따라 배열할 수 있지만, 처리를 잘 못하는 것 같습니다.np.where 등으로 문자열을 수치로 변환한 다음 처리합니다.True, False의 bool형은 nump도 빠르다.
공통 함수 Sort 시스템
a_sort=np.sort(a,kind="stable")
ind=np.argsort(a,kind="stable") #ind: index
a_sort=a[ind]
ind2=np.lexsort((c,b,a))
sort는sort의 배열을 되돌려주고,argsort는sort의 추가 글자의 순서를 되돌려줍니다.순서를 기억하고 싶을 때argsort로 추가 글자를 미리 출력합니다.기본적으로 원시 배열의 순서가 바뀔 수도 있고 의도하지 않은 결과가 나올 수도 있기 때문에kind="stable"옵션에서 안정적인 정렬을 사용하는 것이 좋습니다.기본적으로 이 옵션에 지각해서 곤란해하는 경우가 없기 때문에 매번kind="stable"를 지정하는 것이 비교적 안전하다.lexsort는 여러 배열의 우선순위를 결정하고sort를 진행하는 데 사용됩니다.추가 문자를 되돌려주기 때문에 실제sort 끝 배열을 얻기 위해 되돌아오는 추가 문자 배열을 원시적인numby 배열의 추가 문자로 지정합니다.뒤에 지정한 배열sort의 우선순위가 높을수록위의 예는 a→b→c의 순서에 따라sort를 진행한다.나는 렉스포트가 그리 빠르지 않다고 생각한다.
2분 탐색np.searchsorted
ind=np.searchsorted(a,b)
AtCoder 문제에서 10^6 정도의 배열이면pythn에 삽입된bisect가 더 빠른 것 같습니다.numby의 장점은 검색한 수치에 그룹을 지정할 수 있다는 것이다.위의 예에서, 숫자가 아닌 b로 진열을 대체함으로써, 그것들에 삽입된 a의 index를 동시에 총괄 처리할 수 있다.b에 배열을 사용하면 numby 처리된 느낌이 듭니다.배열 초기화
a=np.zeros((n,),dtype=np.int)
b=np.ones((n,),dtype=np.int)
c=np.fill((n,),c0,dtype=np.int)
d=np.empty((n,),dtype=np.int)
기본 소수 n의 1차원 진열의 초기화 예시.zeroos 초기 값이 0에 대입됩니다.원스는 11full로 c0을 대입한 것이다.empty가 어떤 대입인지 모르겠지만 메모리가 가장 빨리 확보됩니다.속도를 극한까지 추구하는 것이 아니라면 기본적으로zeroos를 사용하면 된다.기본적으로 dype는 부동점형입니다.AtCoder에서는 대부분의 경우 정수를 처리하므로 dype을 지정합니다.np.int는 64byte이기 때문에 일반적으로 사용할 때 넘치지 않습니다.그러나python에서 사용하는 정수와 달리 2^64를 초과하면np입니다.int가 넘쳐야 합니다.상당히 큰 배열이라도np.int64와 np.int8의 계산 속도는 거의 변하지 않으며 메모리 절약의 목적이 없으면np.인트라면 될 것 같아서요.실제 측정 데이터라면 거대한 데이터를 저장하는 데 필요한 메모리가 2GB나 16GB일 때 PC의 요청 규격이 바뀌기 때문에 배열 중의 요소의 최대치가 256이나 2^16=65536보다 작다는 것을 알면 pnp이다.int8과np.int 16을 사용하는 이유가 충분합니다.좌표 압축도 가능한numby.unique
수조에서 원소의 출현 횟수를 계산하는 함수입니다.return_counts, return_index, return_매번 inverse 등 몇 가지 옵션이 구글에서 검색됩니다.
만약
u,inverse=np.unique(a,return_inverse=True)
이라면inverse는 원시 배열을 좌표로 압축한 배열이어야 한다.
Reference
이 문제에 관하여(AtCoder에서 numby를 사용하려고 합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ark_sakura/articles/0ec6c086b37914텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)