2
Python ve Panda'larda oldukça yeni. Bir Pandalar Datframe içinde ben şu var sütunlar: Pandaları kullanarak satırlar arasında benzerlik/mesafe hesaplayın daha hızlı
yıl sütunlara artistHotnesss gelen sayısal verilerle SongNumber songID ALBUMID ArtistID similarArtists artistHotttnesss songHotness ses yüksekliği tempo yıl. yüzden aşağıdaki kodu kullanarak şarkılar arasındaki mesafe/kosinüs hesaplama çalıştı:
t1=time()
m = 1000
mat = np.zeros((m, m))
for i in range(0,m):
for j in range(0,m):
if i != j:
mat[i][j] = euclidean(data.ix[i,5:], data.ix[j,5:])
'''if data.ix[i,2] == data.ix[j,2]:
mat[i][j] += 1
if data.ix[i,3] == data.ix[j,3]:
mat[i][j] += 1
#l1,l2 - list of similar artists
l1_str = data.ix[i,4].strip(']')[1:]
l2_str = data.ix[j,4].strip(']')[1:]
l1 = l1_str.split()
l2 = l2_str.split()
common = len(set(l1).intersection(l2))
mat[i][j] += common
mat[i][j] /= 3'''
else:
mat[i][j] = 0.0
t2 =time()
print(t2-t1)
Yani bu aslında 10^4 * 10^4 kez sarılarak gerektirir. Bunu m = 1000 için gerçekleştirirsem, 2249 sn veya 37.48 dakika içinde sonuç elde ederim, bu yüzden m = 10000 için sonuçları zamanında alamıyorum.
Nasıl hızlandırabilirim (döngüleri önlemek için? Panda işlevleri)?
sayesinde yardım
'sklearn 'ifadesinin' numpy' ve 'for' döngülerinin kullanılmasından daha hızlı olduğunu ispatlayabilir misiniz? –
, çünkü mesafeleri hesaplamak için döngülere karşı doğrusal cebir kullanır. belgelere göre, formülü dist (x, y) = sqrt (nokta (x, x) - 2 * nokta (x, y) + nokta (y, y)) (nokta nokta ürünüdür) – dmb
İsterseniz numol ile kendi vectorized fonksiyonunuzu yapın, ama döngüler için daha hızlı – dmb