Khi viết một tập lệnh, tôi phát hiện ra hàm numpy.random.choice. Tôi thực hiện nó bởi vì nó đã được sạch hơn nhiều so với tuyên bố nếu tương đương. Tuy nhiên, sau khi chạy tập lệnh, tôi nhận ra rằng đáng kể là chậm hơn câu lệnh if.Tại sao ngẫu nhiên.choice quá chậm?
Sau đây là MWE. Phương pháp đầu tiên mất 0,0 s, trong khi phương pháp thứ hai mất 7,2 s. Nếu bạn mở rộng vòng lặp i, bạn sẽ thấy tốc độ ngẫu nhiên chậm.
Mọi người có thể nhận xét về lý do ngẫu nhiên.choice chậm hơn rất nhiều không?
import numpy as np
import numpy.random as rand
import time as tm
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
tmp = rand.rand()
if tmp < 0.25:
var = 1
elif tmp < 0.5:
var = -1
print('Time: %.1f s' %(tm.time() - tStart))
#-------------------------------------------------------------------------------
tStart = tm.time()
for i in xrange(100):
for j in xrange(1000):
var = rand.choice([-1, 0, 1], p = [0.25, 0.5, 0.25])
print('Time: %.1f s' %(tm.time() - tStart))
Đó không thực sự là một sự so sánh công bằng. Mỗi lần, numpy phải lấy tổng tích lũy của danh sách p, đặt nó vào một vectơ mới, và sau đó lặp lại nó. Bạn đang thực hiện tiền xử lý hiệu quả bằng cách biết rằng chỉ có ba biến, và tổng của giá trị đầu tiên và thứ ba là 0,5. Ngoài ra, như được lưu ý bên dưới, phần mềm được tối ưu hóa cho các hoạt động được vector hóa, không phải để thực hiện một thao tác đơn lẻ hàng nghìn lần. –
Ngoài ra, sử dụng 'timeit', không phải' thời gian'. – Marcin