Вот довольно понятная версия, использующая синтаксис метода:
IEnumerable<JoinPair> outerLeft =
lefts.SelectMany(l =>
rights.Where(r => l.Key == r.Key)
.DefaultIfEmpty(new Item())
.Select(r => new JoinPair { LeftId = l.Id, RightId = r.Id }));
Я предполагаю, что вы хотите работать с несколькими файлами одновременно. Для этого лучший способ (на мой взгляд) - использовать multiprocessing
. Чтобы использовать это, вам нужно определить элементарный шаг, и это уже сделано в вашем коде.
import numpy as np
import multiprocessing as mp
import os
def compute(file):
mindex=np.zeros((1200,1200))
for i in range(1200):
var1 = xray.open_dataset(file)['variable'][:,i,:].data
for j in range(1200):
var2 = var1[:,j]
## Mathematical Calculations to find var3[i,j]##
mindex[i,j] = var3[i,j]
return (file, mindex)
if __name__ == '__main__':
N= mp.cpu_count()
files = os.scandir(folder)
with mp.Pool(processes = N) as p:
results = p.map(f, [file.name for file in files])
Это должно вернуть список элементов results
, в котором каждый элемент является кортежем с имя файла и матрицу mindex. При этом вы можете работать с несколькими файлами одновременно. Это особенно эффективно, если вычисление для каждого файла длинное.
mp.pool.ThreadPool
достигнет той же производительности (может быть, даже лучше, посколькуmindex
не нужно сериализовать). Однако для этого потребуется контрольный показатель. – Vincent 13 July 2018 в 13:56