3

我知道如何执行一个并行循环joblib,返回一个列表作为结果。

但是,是否可以numpy并行填充预定义的矩阵?

想象一下以下最小的示例矩阵和数据:

column_data = ['a', 'b', 'c', 'd', 'e', 'f', 'x']
data = [['a', 'b', 'c'],
        ['d', 'c'],
        ['e', 'f', 'd', 'x']]
x = np.zeros((len(data), len(column_data))

请注意,这column_data是已排序且唯一的。data是列表的列表,而不是矩形矩阵。

循环:

for row in range(len(data)):
    for column in data[row]:
        x[row][column_data.index(column)] = 1

可以并行化这个循环吗?在没有并行化的情况下填充70,000 x 10,000矩阵非常慢。

4

1 回答 1

5

这是一种几乎 矢量化的方法 -

lens = [len(item) for item in data]    
A = np.concatenate((column_data,np.concatenate(data)))
_,idx = np.unique(A,return_inverse=True)

R = np.repeat(np.arange(len(lens)),lens)
C = idx[len(column_data):]

out = np.zeros((len(data), len(column_data)))    
out[R,C] = 1

这是另一个——

lens = [len(item) for item in data]
R = np.repeat(np.arange(len(lens)),lens)
C = np.searchsorted(column_data,np.concatenate(data))

out = np.zeros((len(data), len(column_data)))
out[R,C] = 1
于 2015-10-13T11:59:59.803 回答