Python 有没有办法把这个循环矢量化

Python 有没有办法把这个循环矢量化,python,numpy,scikit-learn,vectorization,Python,Numpy,Scikit Learn,Vectorization,有没有办法将此代码矢量化以消除for循环: import numpy as np Z = np.concatenate((X, labels[:,None]), axis=1) centroids = np.empty([len(unique(labels))-1,2]) for i in unique(labels[labels>-1]): centroids[i,:]=Z[Z[:,-1]==i][:,:-1].mean(0) centroids 此代码从生成伪质心,以防您想要

有没有办法将此代码矢量化以消除for循环:

import numpy as np
Z = np.concatenate((X, labels[:,None]), axis=1)
centroids = np.empty([len(unique(labels))-1,2])
for i in unique(labels[labels>-1]):
    centroids[i,:]=Z[Z[:,-1]==i][:,:-1].mean(0)
centroids
此代码从生成伪质心,以防您想要使用它来查找矢量化形式,即示例中定义了
X
标签

谢谢你的帮助

您可以使用
bincount()
三次:

count = np.bincount(labels)
x = np.bincount(labels, X[:, 0])
y = np.bincount(labels, X[:, 1])

centroids = np.c_[x, y] / count[:, None]
print centroids
但如果你能使用熊猫,这很简单:

Z = np.concatenate((X, labels[:,None]), axis=1)
df = pd.DataFrame(Z, columns=("x", "y", "label"))
df[df['label']>-1].groupby("label").mean()
您可以使用
bincount()
三次:

count = np.bincount(labels)
x = np.bincount(labels, X[:, 0])
y = np.bincount(labels, X[:, 1])

centroids = np.c_[x, y] / count[:, None]
print centroids
但如果你能使用熊猫,这很简单:

Z = np.concatenate((X, labels[:,None]), axis=1)
df = pd.DataFrame(Z, columns=("x", "y", "label"))
df[df['label']>-1].groupby("label").mean()
您可以使用
bincount()
三次:

count = np.bincount(labels)
x = np.bincount(labels, X[:, 0])
y = np.bincount(labels, X[:, 1])

centroids = np.c_[x, y] / count[:, None]
print centroids
但如果你能使用熊猫,这很简单:

Z = np.concatenate((X, labels[:,None]), axis=1)
df = pd.DataFrame(Z, columns=("x", "y", "label"))
df[df['label']>-1].groupby("label").mean()
您可以使用
bincount()
三次:

count = np.bincount(labels)
x = np.bincount(labels, X[:, 0])
y = np.bincount(labels, X[:, 1])

centroids = np.c_[x, y] / count[:, None]
print centroids
但如果你能使用熊猫,这很简单:

Z = np.concatenate((X, labels[:,None]), axis=1)
df = pd.DataFrame(Z, columns=("x", "y", "label"))
df[df['label']>-1].groupby("label").mean()

回答得很好,海瑞,谢谢你的帮助!第一个numpy版本不太有效,因为离群值的标签中有负值,这就是为什么我有“labels[labels>-1]”。熊猫版非常好用,我可以通过上面包含的小编辑消除负索引。如果您在numpy解决方案中对此问题有解决方案,我会很高兴看到它。再次感谢!回答得很好,海瑞,谢谢你的帮助!第一个numpy版本不太有效,因为离群值的标签中有负值,这就是为什么我有“labels[labels>-1]”。熊猫版非常好用,我可以通过上面包含的小编辑消除负索引。如果您在numpy解决方案中对此问题有解决方案,我会很高兴看到它。再次感谢!回答得很好,海瑞,谢谢你的帮助!第一个numpy版本不太有效,因为离群值的标签中有负值,这就是为什么我有“labels[labels>-1]”。熊猫版非常好用,我可以通过上面包含的小编辑消除负索引。如果您在numpy解决方案中对此问题有解决方案,我会很高兴看到它。再次感谢!回答得很好,海瑞,谢谢你的帮助!第一个numpy版本不太有效,因为离群值的标签中有负值,这就是为什么我有“labels[labels>-1]”。熊猫版非常好用,我可以通过上面包含的小编辑消除负索引。如果您在numpy解决方案中对此问题有解决方案,我会很高兴看到它。再次感谢!