python - 从 pandas 系列和 csr 矩阵并行化填充 ndarray
问题描述
目前使用for循环将pandas系列(类别/对象dtype)和csr矩阵(numpy)中的值填充到ndarray,我希望加快速度
顺序 for 循环(有效),numba(不喜欢系列和字符串),joblib(比顺序循环慢),swifter.apply(慢得多,因为我必须使用 pandas,但它确实并行化)
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]
没有错误消息,但这很慢,因为它使用一个线程!
解决方案
正如Divarak提到的,切片直接有效
matches_df["left_side"] = name_vector.iloc[sparserows].values
matches_df["right_side"] = name_vector.iloc[sparsecols].values
matches_df["similarity"] = matches.data
推荐阅读
- reactjs - 从 reactsJS 中的 iframe 捕获 html2canvas
- python - 使用请求和漂亮的汤访问网页
- python - Selenium chrome 不加载特定网站的图像
- laravel - 获取子类别下的产品数量以及子类别中主要类别的总数
- download - 如何使用启用下载列表器将驱动器链接插入到 android studio 项目
- ms-wopi - 在 windows server 2012 r2 中配置 WOPI 集成后 Excel 未打开
- payumoney - 如何修复 wordpress 中 Payumoney 不正确的哈希参数错误
- saml-2.0 - 如何将新参数/组织特定参数添加到 XML
- mysql - 已交付项目的销售和交付数量 2 表
- php - 如何在侧边栏中显示cpt类别?