multiprocess.pool.apply的参数引发一个错误,即它是循环中的int时,它是不可迭代的int

时间:2019-04-15 00:21:11

标签: python multiprocessing

在类函数中,我有一个可迭代的函数,该函数遍历给定输入数据矩阵的所有向量。我通过索引来做到这一点,因为我会跟踪检查哪些点以及它们属于哪个簇。 现在,我试图将其并行化,并且出现两个问题:

[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循环运行。

0 个答案:

没有答案