【发布时间】:2016-04-13 03:03:40
【问题描述】:
我对 Python 和 Pandas 还很陌生。 我在 Pandas 数据框中有以下列:
歌曲编号歌曲ID 专辑ID 艺术家ID 相似艺术家艺术家Hotttnesss songHotness Loudness tempo year
从艺术家热度到年份列的数字数据。 所以我尝试使用以下代码计算歌曲之间的距离/余弦:
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)
所以这基本上需要循环 10^4*10^4 次。 如果我对 m =1000 执行此操作,我会在 2249 秒或 37.48 分钟内获得结果,因此我无法及时获得 m = 10000 的结果。
如何加快速度(通过避免循环?pandas 函数)?
感谢您的帮助
【问题讨论】: