여기에 내가 (9) 대신 (31)의 최대 값을 사용합니다,
가 읽을 수있는 예를 쉽게하기 위해 ... 하나의 방법입니다 :
In [181]: counts = np.zeros((maxval+1, maxval+1), dtype=int)
,536,913 :
In [179]: np.random.seed(123)
In [180]: x = np.random.randint(0, maxval+1, size=100)
는 처음에 모든 0 결과를 만들기
예
In [182]: np.add.at(counts, (x[:-1], x[1:]), 1)
In [183]: counts
Out[183]:
array([[2, 1, 1, 0, 1, 0, 1, 1, 1, 1],
[2, 1, 1, 3, 0, 2, 1, 1, 1, 1],
[0, 2, 1, 1, 4, 0, 2, 0, 0, 0],
[1, 1, 1, 3, 3, 3, 0, 0, 1, 2],
[1, 1, 0, 1, 1, 0, 2, 2, 2, 0],
[1, 0, 0, 0, 0, 0, 1, 1, 0, 2],
[0, 4, 2, 3, 1, 0, 2, 1, 0, 1],
[0, 1, 1, 1, 0, 0, 2, 0, 0, 3],
[1, 2, 0, 1, 0, 0, 1, 0, 0, 0],
[2, 0, 2, 2, 0, 0, 2, 2, 0, 0]])
, 시간 (6)의 수는 1 이어진다
In [188]: counts[6, 1]
Out[188]: 4
우리가 할 수있다 : 중복 적절하게 계산되었는지 63,210
지금 있도록 numpy.add.at
를 사용하여, 각각의 좌표 쌍 1을 추가 다음 표현식을 사용하여 확인하십시오.
In [189]: ((x[:-1] == 6) & (x[1:] == 1)).sum()
Out[189]: 4
이것은 매우 우아한 해결책입니다. 이 numpy 함수가 실제로 무슨 일이 일어나는지 이해하는 방법을 조사해야하지만! – valentin