python - 使用索引列表有效地填充 NumPy 数组

标签 python numpy parallel-processing vectorization joblib

我知道如何在返回列表结果的 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 矩阵非常慢。

最佳答案

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

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

关于python - 使用索引列表有效地填充 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101207/

相关文章:

python - 在 unicode 中将 pandas DataFrame 写入 JSON

python - 计算 numpy.ndarray 内的度数

python - numpy.array2string 未检测 native 类型

c - 为什么 CILK_NWORKERS 会影响只有一个 cilk_spawn 的程序?

python - 使用 xml.etree.ElementTree 搜索 XML 元素树的属性

python - Pandas - 获取 pandas 数据框列括号内的值

python - Numpy,数组没有自己的数据?

java - 并行化异构任务的局限性

java - 多线程java

python - 如何返回分位数切割范围的最大值而不是分位数标签