【发布时间】:2020-01-12 17:25:59
【问题描述】:
我有一个xarray DataArray,尺寸如下:
vals.shape
(210, 587, 1, 1)
它包含 587 个不同日期的 210 个不同物种的单个值。我想形成一个数组,该数组是每天的物种 x 物种,其中在给定的一天,该矩阵的每一行都包含当天物种的相同归一化(总和为一)值(即索引 (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 列表)。我怎样才能更有效地表达这一点?
【问题讨论】:
-
我对xarray不熟悉,你一定要用NumPy做这个吗?
-
@AMC,我不必用 numpy 来做,我总是可以最终转换为需要的任何东西,因此可以将任何东西用于构建步骤。
-
我总是可以最终转换成需要的东西那么需要什么?
-
最后,我转换为当前使用
xarray实现的内部数据结构,然后将其写入磁盘。如果可以的话,我什至不需要使用numpy使用原生xarray类型快速以上 -
如果我可以使用原生 xarray 类型快速完成上述操作,我什至不需要使用 numpy 可能是,嗯。
标签: python arrays numpy numpy-ndarray python-xarray