numpy로 이상한 성능 결과

파이썬으로 성능 테스트를하고 있습니다. 다양한 방식으로 큰 배열을 인덱싱하여 성능이 상당히 달라졌습니다. 여기 내 현재 프로젝트의 내용이 있습니다.

import numpy as np
import time

N=100000
i=0
rep=1000

x1=np.random.randn(N,4)
x2=np.random.randn(4,N)
G1=np.random.randn(N,4,3)
G2=np.random.randn(4,N,3)
B=np.random.randn(N,3)


starttime=time.time()
for k in range(rep):
    x1[:,i]=(G1[:,i,:] * B[:,:]).sum(axis=1)
elapsedtime1=time.time()-starttime


starttime=time.time()
for k in range (rep):
    x2[i,:]=(G2[i,:,:] * B[:,:]).sum(axis=1)
elapsedtime2=time.time()-starttime

print ("elaplsedtime1= "+str(elapsedtime1))
print ("elaplsedtime2= "+str(elapsedtime2))
diff=(elapsedtime2-elapsedtime1)/elapsedtime2
print ("diff= "+str(diff))

나는 다음과 같은 결과를 얻었다.

% python test.py
elaplsedtime1= 2.46446800232
elaplsedtime2= 1.52360200882
diff= -0.617527404173

즉, 두 계산의 성능 차이가 60 %입니다. 예상치 못한 일입니까?

Bousof

댓글에서 이미 답변했듯이 성능 차이는 아마도 인덱싱 때문일 것입니다.

그러나 numpy로 작업 할 때 작은 차원 (귀하의 경우 3)을 가진 축에서 합계를 호출 할 때 효율성이 나쁘다는 것을 알았습니다.

테스트 케이스의 경우 sum 함수 호출을 행렬 곱 연산으로 1로 구성된 벡터로 대체하여 추가 100 % 속도 향상을 얻을 수 있습니다.

여기에 차원 변수 D를 추가했습니다 (귀하의 경우 D = 3).

import numpy as np
import time

N=100000
i=0
rep=1000

D = 3

x1=np.random.randn(N,4)
x2=np.random.randn(4,N)
G1=np.random.randn(N,4,D)
G2=np.random.randn(4,N,D)
B=np.random.randn(N,D)

ones=np.ones((D,))

starttime=time.time()
for k in range(rep):
    x1[:,i]=(G1[:,i,:] * B[:,:]).sum(axis=1)
elapsedtime1=time.time()-starttime

starttime=time.time()
for k in range (rep):
    x1[:,i]=(G1[:,i,:] * B[:,:]) @ ones
elapsedtime2=time.time()-starttime

print ("elaplsedtime1= "+str(elapsedtime1))
print ("elaplsedtime2= "+str(elapsedtime2))
diff=(elapsedtime2-elapsedtime1)/elapsedtime2
print ("diff12= "+str(diff))

나는 다음과 같은 결과를 얻었다.

% python3 script.py
elaplsedtime1= 2.2359278202056885
elaplsedtime2= 1.1143040657043457
diff12= -1.006568843300747

벡터가 즉석에서 생성 되더라도 속도 향상은 유지됩니다. 그러나 치수 D가 증가하면 속도 향상이 감소합니다.

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

numpy 행렬 곱셈에 대한 이상한 성능 결과

분류에서Dev

재현 가능한 NumPy의 무작위 결과 : 재생성 vs 재생성

분류에서Dev

재귀로 인한 예기치 않은 성능 결과

분류에서Dev

Array.map () 이상한 결과 생성

분류에서Dev

Kivy 이상한 너비 속성 결과

분류에서Dev

NetworkManager로 팀 연결을 생성 한 후 재부팅시 이상한 결과가 사라집니다.

분류에서Dev

3 개 이상의 매개 변수로 이상한 결과를 생성하는 SilverStripe 라우팅

분류에서Dev

PostgreSQL 쿼리가 ORDER BY로 예측 가능한 결과 순서를 적용하지 않는 한 일관성없는 결과를 제공하는 이유

분류에서Dev

numpy.NAN으로 배열을 초기화하는 이상한 결과

분류에서Dev

항목 목록과 가능한 속성을 요약 테이블로 결합하는 방법

분류에서Dev

동일한 DF 템플릿을 병렬로 실행하면 이상한 결과가 생성됩니다.

분류에서Dev

플로트 배열을 생성하면 이상한 결과가 생성됩니다.

분류에서Dev

결과가 둘 이상의 행으로 구성됨 SQL = INSERT INTO

분류에서Dev

유사한 카레 기능이 다른 결과를 생성

분류에서Dev

테이블 결과에서 선택에 대한 SQL 성능

분류에서Dev

예상 결과에 대한 매개 변수로 Python 데이터 변환 유효성 검사

분류에서Dev

PIL로 임의의 그림을 생성하려고하는데 이상한 결과가 나타납니다.

분류에서Dev

TikZ 그림에서 ImageMagick으로 변환하면 이상한 결과가 생성됩니다.

분류에서Dev

이상한 "변경 가능"결과 R에서 루프 발생

분류에서Dev

numpy.linalg.norm은 이상한 결과를 제공합니다.

분류에서Dev

numpy 배열을 사용하는 동안 이상한 결과

분류에서Dev

이상한 결과로 이미지를 RGB 채널로 분할

분류에서Dev

성과 이름과 성을 모두 대문자로 연결

분류에서Dev

슬롯 머신의 가능한 모든 결과를 순차적으로 생성하는 Python 알고리즘

분류에서Dev

검색 속도 성능 향상을위한 힌트 : 검색 결과 검색?

분류에서Dev

이상한 결과를 생성하는 조건문?

분류에서Dev

ORACLE SQL 쿼리에 대해 생성 된 이상한 결과

분류에서Dev

grep의 결과를 사용하여 sed로 한 줄씩 결과 작성

분류에서Dev

가능한 모든 결과

Related 관련 기사

  1. 1

    numpy 행렬 곱셈에 대한 이상한 성능 결과

  2. 2

    재현 가능한 NumPy의 무작위 결과 : 재생성 vs 재생성

  3. 3

    재귀로 인한 예기치 않은 성능 결과

  4. 4

    Array.map () 이상한 결과 생성

  5. 5

    Kivy 이상한 너비 속성 결과

  6. 6

    NetworkManager로 팀 연결을 생성 한 후 재부팅시 이상한 결과가 사라집니다.

  7. 7

    3 개 이상의 매개 변수로 이상한 결과를 생성하는 SilverStripe 라우팅

  8. 8

    PostgreSQL 쿼리가 ORDER BY로 예측 가능한 결과 순서를 적용하지 않는 한 일관성없는 결과를 제공하는 이유

  9. 9

    numpy.NAN으로 배열을 초기화하는 이상한 결과

  10. 10

    항목 목록과 가능한 속성을 요약 테이블로 결합하는 방법

  11. 11

    동일한 DF 템플릿을 병렬로 실행하면 이상한 결과가 생성됩니다.

  12. 12

    플로트 배열을 생성하면 이상한 결과가 생성됩니다.

  13. 13

    결과가 둘 이상의 행으로 구성됨 SQL = INSERT INTO

  14. 14

    유사한 카레 기능이 다른 결과를 생성

  15. 15

    테이블 결과에서 선택에 대한 SQL 성능

  16. 16

    예상 결과에 대한 매개 변수로 Python 데이터 변환 유효성 검사

  17. 17

    PIL로 임의의 그림을 생성하려고하는데 이상한 결과가 나타납니다.

  18. 18

    TikZ 그림에서 ImageMagick으로 변환하면 이상한 결과가 생성됩니다.

  19. 19

    이상한 "변경 가능"결과 R에서 루프 발생

  20. 20

    numpy.linalg.norm은 이상한 결과를 제공합니다.

  21. 21

    numpy 배열을 사용하는 동안 이상한 결과

  22. 22

    이상한 결과로 이미지를 RGB 채널로 분할

  23. 23

    성과 이름과 성을 모두 대문자로 연결

  24. 24

    슬롯 머신의 가능한 모든 결과를 순차적으로 생성하는 Python 알고리즘

  25. 25

    검색 속도 성능 향상을위한 힌트 : 검색 결과 검색?

  26. 26

    이상한 결과를 생성하는 조건문?

  27. 27

    ORACLE SQL 쿼리에 대해 생성 된 이상한 결과

  28. 28

    grep의 결과를 사용하여 sed로 한 줄씩 결과 작성

  29. 29

    가능한 모든 결과

뜨겁다태그

보관