numpy로 바꿨더니, 훨씬 빠르네.


numpy에 array count 구하는 게 없어서 불편했는데,

bincount로 대신해서 쓸 수 있었다.

numpy.bincount

>>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))
array([1, 3, 1, 1, 0, 0, 0, 1])

전체 count를 구하는 것인데도 O(n)보다 더 빠른 것 같아... 내 착각인가


np.histogram이나 Counter도 쓸 수 있나보다.

find the most frequent number in a numpy vector

How can I generate a complete histogram with numpy?


결과를 python list 변수 그대로 출력해두기

execfile("...py")로 불러들일 수 있다.


계산에 1시간 쯤 걸리는 것 같다.


고친 부분

n_slots = 1000

n_iterations = 10000

n_people_range = range(n_slots*2, 50000, n_iterations/100)

...

votes = numpy.random.randint(n_slots, size=n_people)

#slot_histogram, n_bins = numpy.histogram(votes)

slot_histogram = numpy.bincount(votes)

#for i in votes:

# slot_histogram[i] = slot_histogram[i] + 1


...

counts = numpy.bincount(slot_histogram)

n_0_slots = counts[0]

n_1_slots = counts[1]

...


n_0_blur_hist = [x/float(n_iterations) for x in n_0_hist]

n_1_blur_hist = [x/float(n_iterations) for x in n_1_hist]


postfix = str(n_slots) + "_" + str(n_people_range[-1] + 1)

fp = open(os.path.dirname(os.path.abspath(__file__)) + "/blur_hist_" + postfix + ".py", "w")

print >>fp, ("range_" + postfix + " = " + str(people_x_range))

print >>fp, ("n_0_hist_" + postfix + " = " + str(n_0_blur_hist))

print >>fp, ("n_1_hist_" + postfix + " = " + str(n_1_blur_hist))

fp.close()






블로그 이미지

언제나19

기본에 충실하는 19식 재테크. 교과서 중심으로 공부했어요.

,




가격 구간, 사람 수가 얼마나 되던 간에 밀도에만 관련이 있다는 것을 확인해 봤다.


500 slots, 10,000 people까지

50 slots, 1,000 people까지

2번 계산한 다음에

2번째 계산 결과를 x, y 10배로 늘려 봤더니, 그래프가 거의 일치한다.

import matplotlib.pyplot as plot

import os


n_0_hist_500_10000 = []

n_1_hist_500_10000 = []

n_0_hist_50_1000 = []

n_1_hist_50_1000 = []


execfile("blur_hist_500_10000.py")

execfile("blur_hist_50_1000.py")


n_0_hist_50_1000_x10 = []

n_1_hist_50_1000_x10 = []


people_x_range = range(0, len(n_0_hist_500_10000))


for i in people_x_range:

n_0_hist_50_1000_x10.append( n_0_hist_50_1000[i/10] * 10)

for i in people_x_range:

n_1_hist_50_1000_x10.append( n_1_hist_50_1000[i/10] * 10)


plot.scatter(people_x_range, n_0_hist_500_10000, c='red', lw=0, alpha=0.5)

plot.scatter(people_x_range, n_1_hist_500_10000, c='blue', lw=0, alpha=0.5)


plot.scatter(people_x_range, n_0_hist_50_1000_x10, c='green', lw=0, alpha=0.5)

plot.scatter(people_x_range, n_1_hist_50_1000_x10, c='yellow', lw=0, alpha=0.5)


plot.show()









블로그 이미지

언제나19

기본에 충실하는 19식 재테크. 교과서 중심으로 공부했어요.

,