我测试了numpy.take和slice的代码如下:
import numpy as np
import time
a = np.random.randn(4000000,500)
b = np.arange(0, len(a))
t1 = time.time()
for i in range(10):
a[b!=2]
t2 = time.time()
print(t2-t1)
t1 = time.time()
for i in range(10):
a.take(b!=2, axis=0)
t2 = time.time()
print(t2-t1)
我检查了我的CPU,其中大部分是空闲的。仅使用1个CPU。结果,时机非常缓慢。
65.91494154930115
47.01117730140686
在我看来,切片是一种可并行化的操作。为什么numpy没有并行化呢?是numpy doens不支持可并行化的切片还是我需要在numpy中使用一些特殊功能?