我有一台具有256GB内存的32核计算机,对并行计算是新手。 我必须运行以下行:
Flag=data.flag [:,:,x]
这是一个非常大的矩阵。 “ x”是指我要存储到文件的子矩阵。但是“更改”了64次,每次迭代耗时+-8分钟,因此需要并行处理
我看了几个例子: https://www.machinelearningplus.com/python/parallel-processing-python/ 和 https://docs.python.org/3.7/library/multiprocessing.html#multiprocessing-programming
代码功能:
def multi_flagger(antenna_no):
recv=data.corr_products[antenna_no][0] # Gets the antenna name and polarization value
flagger=data.flags[:, :, antenna_no] # Flags the data based on the antenna value
mat_flag = np.matrix(flagger) # Morphs the 2d array into a matrix
np.save('Flagged_data_'+str(recv)+'_.npy', mat_flag) # Saves the data to a file
pool.map(multi_flagger, for i in range(2))
pool.close()
我收到此错误:
File "<ipython-input-58-e1a6f9779b9a>", line 1 pool.map(multi_flagger, for i in range(2)) ^ SyntaxError: invalid syntax`
我想要的是将64个.npy文件写入磁盘
答案 0 :(得分:1)
方法Pool.map(func, iterable)
期望可迭代,可以是tuple
或list
。您不能像尝试过的那样通过for
循环(for i in range(2)
),而是可以通过list of numbers from a range:
pool.map(multi_flagger, list(range(2))) # [0, 1]
我不确定您的其余代码,但是使用Pool
时,您需要在创建Pool
实例时设置辅助进程的数量(如{{3 }}示例),然后调用map
传递要执行的函数并输入函数:
def multi_flagger(antenna_no):
recv=data.corr_products[antenna_no][0]
flagger=data.flags[:, :, antenna_no]
mat_flag = np.matrix(flagger)
np.save('Flagged_data_'+str(recv)+'_.npy', mat_flag)
with Pool(processes=3) as pool: # set the number of worker processes
pool.map(multi_flagger, list(range(2))) # pass a list of antenna_no
pool.close()
答案 1 :(得分:0)
所以问题是与射电望远镜中使用的称为“ katdal”的特定包装有关。我想出了解决方案,这是因为标志线。每次需要读取数据
public void startgame() {
...
}
但这给我带来了一个新问题,即一直在读取数据文件,这实际上占用了时间和空间。