У меня есть xarray
DataArray
со следующими размерами:
vals.shape
(210, 587, 1, 1)
содержит одно значение для 210 различных видов за 587 различных дат. Я хотел бы сформировать массив, который является видом х видов для каждого дня, где в данный день каждая строка этой матрицы содержит одинаковые нормализованные (сумма к одному) значения вида для этого дня (т.е. где индекс (i,j)
матрица на данную дату содержит значение для вида j
в этот день). Мне также нужно, чтобы конечный массив имел дополнительное измерение I
и был упорядочен Species x Dates x I x Species
В настоящее время я могу добиться этого, выполнив следующее:
#form a list of species x species matrices:
daily_arrays = [np.array([vals[:, i, 0, 0] for n in range(210)]) for i in 587]
#normalize rows to sum to 1 on each day
daily_arrays = [x / x.sum(axis=1)[:, np.newaxis] for x in daily_arrays]
#stack them up and throw on the `I` dimension
desired_array = np.stack([np.stack(daily_arrays, axis=1)], axis=2)
К сожалению, в настоящее время это занимает более 3 часов (узкое место составляет список daily_arrays
). Как я могу express это более эффективно?