使用列表中的所有成对参数并行化函数

时间:2017-08-30 17:18:36

标签: python multithreading

我在找到一个并行化这个过程很慢的策略时遇到了一些麻烦。我必须解析一些数据并计算列表中所有成对条目之间的分数。由于列表非常大(> 1E6),我必须将所有分数存储在scipy.sparse.csr_matrix((values,(row,col))中,其中值是所有非零分数,行和列的列表是逐行/逐列索引对应于它们各自的2D数组位置。(我使用scipy.parse.csr_matrix,因为numpy 2D数组不适合内存)

主要问题是如何并行化这个过程,在过程结束时调整输入拆分和输出连接之间的行和列索引。

这是我目前的代码。我会很感激任何提示/方向移动一个。

from scipy.sparse import csr_matrix

def heavy_calculation(arg1, arg2):
    # some calculations here
    return value

def generateCsrMatrix(allArgs):
    row = []
    col = []
    dat = []
    for ind1 in range(len(allArgs)-1):
        for ind2 in range(ind1+1, len(allArgs):
          value = heavy_calculation(allArgs[ind1], allArgs[ind2])
          if value > 0:
              row.append(ind1)
              col.append(ind2)
              dat.append(value)
    # End nested loop
    dat2 = csr_matrix((dat, (row, col), shape=(len(allArgs),len(allArgs)))
    return dat2

我的策略是将所有成对索引生成为列表中的元组,并使用多线程生成多线程,但这种方法会增加显着的内存开销。

[(ind1, ind2), (ind1, ind3), ...]

0 个答案:

没有答案