Ben aşağıdaki kodu hızlandırmak gerekir:Bu iki satırlı kodu nasıl hızlandırabilirim?
for i in range(0, 2**N):
output[i] = f(np.array(map(int, bin(i)[2:].zfill(N))))
N
civarında 30
, bu nedenle kodu (Dizüstü bilgisayarımda yaklaşık 33 saat sürer) çok yavaştır. f()
işlevinin argümanı, i
dizininin ikili gösterimidir ve f()
, rasgele bir vektörleştirilebilir işlev olabilir. Ben uzman değilim, ama kodu hızlandırmak içinargümanını vectorize etmem gerektiği anlamına gelen for
döngüsünden kurtulmayı düşünüyordum. Başka bir deyişle, 0
'dan 2**N
'a kadar sayıların ikili gösterimleriyle bir matris oluşturmam gerekiyor. Bu aşağıdaki kod üzerinden elde edilebilir:
list(itertools.product([0, 1], repeat=N))
Ben this link de bulunduğunu bildirdi. Ancak, bana itertools
'un çok yavaş olduğu ve 2**30
'un yaklaşık bir milyar olduğu için çok fazla bellek gerektirdiği görülüyor.
Bu kodu daha hızlı yapmak için herhangi bir öneriniz var mı? Şimdiden teşekkürler.
“Çıktının” son değerinin tümünü atıyor gibisiniz. – user2357112
Bir milyar eleman dizisi üretmek yerine, neden bir jeneratör olarak yeniden yazılmıyor? – dawg
Jeneratörleri ve "verim" komutlarını arayın. – oliversm