有这么一个需求:需要从一个列表中( 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 哈哈 洋人实测
|