擅长:python、mysql、java
<p>您的<code>centroids</code>不需要是实际的列表。在</p>
<p>除了<code>centroids[i][m]</code>,您似乎从未引用过其他任何内容。如果您只想要<code>centroids[i]</code>,那么它可能不需要是一个列表;一个简单的字典就可以了。在</p>
<pre><code> centroids = defaultdict(float)
# Move the centroids to the average of their members
for i in range(k):
len_best = len(bestmatches[i])
if len_best > 0:
items = set.union(*[set(prefs[u].keys()) for u in bestmatches[i]])
for user_id in bestmatches[i]:
row = prefs[user_id]
for m in items:
if row[m] > 0.0: centroids[m]+=(row[m]/len_best)
</code></pre>
<p>可能会更好。在</p>