Вы можете использовать понимание списка, оно должно немного ускориться:
for i1 in range(N):
averages[i1] = [np.linalg.norm(trips[i1] - centroids[j])**2 for j in range(K)]
assigns = [int(np.argmin(averages[i2])) for i2 in range(N)]
for i3 in range(K):
temp = np.zeros([F])
temp = np.expand_dims(temp, axis=0)
for j in range(N):
if(int(assigns[j]) == i3):
temp = np.insert(temp, 0, trips[j], axis=0)
temp = temp[:-1, :]
if(temp.shape[0] > 0):
centroids[i3] = temp.sum(axis=0) / temp.shape[0]
Я переименовал некоторые индексы, поэтому я не знаю, правильно ли я выбрал правильные в формулах.В любом случае, я не рекомендую использовать один и тот же индекс во вложенных циклах, это может привести к трудностям при поиске.