我有一个二维的numpy形状数组(45000,14000)。
按照以下链接中的示例:joblib.Parallel,我正在尝试并行执行此过程以减少计算时间。
这是我的代码在较小数组(30,30)上的演示:
import numpy as np
from joblib import Parallel, delayed
from tqdm import tqdm
class vec:
embed_c2 = []
def stack_vectors(self, c2, i):
y = np.array(c2[i]).reshape([1, -1])
if len(vec.embed_c2) == 0:
vec.embed_c2 = y
else:
vec.embed_c2 = np.vstack((vec.embed_c2, y)).copy()
def test(self):
c2 = np.ones((30, 30))
loop = tqdm(range(len(c2)))
loop.set_description('processing')
Parallel(n_jobs=1)(delayed(self.stack_vectors)(c2, i) for i in loop)
print(vec.embed_c2.shape)
c = vec()
c.test()
我在这段代码中没有问题,但是当我将n_jobs更改为2或更大时,会出现以下错误:
第23行,正在测试
print(vec.embed_c2.shape)
AttributeError:“列表”对象没有属性“形状”
以n_jobs为2为例,“ embed_c2”未转换为numpy数组且其大小为零,而n_jobs为1时,它正确填充并转换为numpy数组。