
有这么一个需求:需要从一个列表中( inx )查找数据的下标(inx_),然后根据下标从一个列表( pserver )复制到另外一个列表(parameters),由于 ndown 的值非常的大,循环过程很慢
for elmn in range(ndown): inx_ = inx[elmn - ndown] parameters[inx_] = pserver[inx_] 我考虑了多线程,但是实验效果对于 cpu 密集型的计算不是很大。 多进程也试了一下,提升也不是很大。 请问,有什么好的方法提升这个速度
1 hxse 2019 年 1 月 8 日 复制?? 为什么不用切片 |
2 congeec 2019 年 1 月 8 日 via iPhone 这是把 python 当 C 用了 一楼说的对 条件允许的话用 numpy.array 会更快 |
3 imn1 2019 年 1 月 8 日 1.实测(洋人实测,不是我),在列表比较大时,列表表达式比 for 循环快 建议把语句写到 fun,用[fun(x) for x in list] 2.不知道你这是举例还是正式的语句,第一句可以省略吧?改改 start/end,inx_就出来了,不必算 3.用 numpy/pandas 按条件提取很快的 |
4 xiaotiange OP @hxse 不是整块复制,需要检索下标,对应复制 |
5 crazycabbage 2019 年 1 月 8 日 ``` import numpy as np a = np.array([1,2,3,4,5]) b = np.array([6,7,8,9,10]) b[[0,2,4]] = a[[0,2,4]] In [11]: b Out[11]: array([1, 7, 3, 9, 5]) ``` |
6 xpresslink 2019 年 1 月 8 日 楼主一定是不太了解 Python 的切片有多方便。 >>> a = [0,0,0,0,0,0] >>> b = [1,2,3,4,5,6,7,8,9] >>> a[2:5] = b[4:7] >>> a [0, 0, 5, 6, 7, 0] >>> |
8 gaoan000 2019 年 1 月 8 日 via Android @xpresslink 我觉得楼主会用到多线程就不应该不会切片,估计是别的地方 |
9 Gakho 2019 年 1 月 8 日 不知道楼主的多进程时怎么用的?能不能用 GIST 贴一下代码 |
10 xpresslink 2019 年 1 月 8 日 @gaoan000 嗯,从楼短短的几行 Python 代码来看,估计楼主会用 java 的多线程 /doge/ |
11 Yuanoung 2019 年 1 月 8 日 可以试下循环展开 |
12 Aliencn 2019 年 1 月 8 日 数据量太多我一般就用数据库了,不在 python 的内存里折腾了 |
13 lrxiao 2019 年 1 月 9 日 这是想要 MPI OpenMP 那种自动向量化吗,numpy numba cython 什么的搞吧 |
14 lrxiao 2019 年 1 月 9 日 你多进程怎么搞的... |
15 lovezww2011 2019 年 1 月 22 日 @imn1 哈哈 洋人实测 |