在类函数中,我有一个可迭代的函数,该函数遍历给定输入数据矩阵的所有向量。我通过索引来做到这一点,因为我会跟踪检查哪些点以及它们属于哪个簇。 现在,我试图将其并行化,并且出现两个问题:
[pool.apply(self.expandcluster, args=i) for i in np.where(self._checked == 0)[0]]
引发错误:
TypeError: expandcluster() argument after * must be an iterable, not int
因此,我想知道如何通过向函数“ expandcluster()”馈送受并行进程影响的布尔向量的索引来进行迭代。
然后,我可能还需要担心并行进程如何影响矢量。但是,多处理教程/文档对此主题非常缺乏。如您所见,我现在尝试遍历该函数,该函数不返回任何值,仅更改两个向量。
class A():
def _init_(self):
init stuff...
def fit(self, x):
self._checked = False * np.array(np.size(X, axis=0))
pool = mp.Pool(8)
[pool.apply(self.expandcluster, args=i) for i in p.where(self._checked
== 0)[0]]
def expandcluster(self, pointIndice):
self._checked[pointIndice] = 1
self._clusterIDs = self.find_points(pointIndice)
它用于DBSCAN的特殊实现,这是一种无监督的群集算法。之所以这样构造数据流,是因为当我检查一个点并证明它是一个聚类中心时,我会检查同一区域中的所有周围点。现在,我不必再次检查这些内容。 我首先实现了没有并行化的算法,效果很好。我可以使用额外的计算能力。原始算法通过范围为(np.size(X,axis = 0))的for循环运行。