Распараллелить заполнение ndarray из серии панд и матрицы csr - PullRequest
0 голосов
/ 06 ноября 2019

В настоящее время используется цикл for для заполнения значений из ряда панд (категория / объект dtype) и матрицы csr (numpy) в ndarray, и я хотел ускорить процесс

Последовательный цикл (работает),numba (не любит серии и строки), joblib (медленнее, чем последовательный цикл), swifter.apply (гораздо медленнее, поскольку мне приходится использовать панд, но он распараллеливается)

import pandas as pd
import numpy as np
from scipy.sparse import rand

nr_matches = 10**5
name_vector = pd.Series(pd.util.testing.rands_array(10, nr_matches))
matches = rand(nr_matches, 10, density = 0.2, format = 'csr')
non_zeros = matches.nonzero()
sparserows = non_zeros[0]
sparsecols = non_zeros[1]

left_side = np.empty([nr_matches], dtype = object)
right_side = np.empty([nr_matches], dtype = object)
similarity = np.zeros(nr_matches)

for index in range(0, nr_matches):
    left_side[index] = name_vector.iat[sparserows[index]]
    right_side[index] = name_vector.iat[sparsecols[index]]
    similarity[index] = matches.data[index]

Нет сообщений об ошибках, ноэто медленно, так как использует один поток!

1 Ответ

0 голосов
/ 06 ноября 2019

как Divarak упоминается, нарезка напрямую работает

matches_df["left_side"] = name_vector.iloc[sparserows].values
matches_df["right_side"] = name_vector.iloc[sparsecols].values
matches_df["similarity"] = matches.data
...