减少 numpy 数组的第三维并对值求和

Blo*_*gik 1 python arrays transpose numpy reshape

我认为这很简单,但我不太明白。我有一个大型 3d 数组,我想按某个因子减少第三个暗淡,然后将这些值相加以获得减少的大小。一个可以得到我想要的东西的例子是:

import numpy as np

arr=np.ones((10,10,16))
processed_data=np.zeros((arr.shape[0], arr.shape[1]), dtype='object')
factor=2

for i in range(arr.shape[0]):
    for j in range(arr.shape[1]):
        processed_data[i][j]=arr[i][j].reshape(int(arr.shape[2]/factor),-1).sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

因此,我们采用最后一个维度,将其重塑为额外维度,然后沿该维度求和。在上面的示例中,数据是一个全为 1 的 10x10x16 数组,因此,当因子 = 2 时,我们会得到一个数据全为 2 的 10x10x8 数组。我希望这能说明我正在努力实现的目标。如果因子变为 4,我们将得到一个 10x10x4 的数组。

这种方法并不理想,因为它涉及创建一个单独的processed_data“对象”数组,我宁愿将其保留为3D数组,只是减少了第三维。它还涉及迭代二维数组中的每个元素,我认为这是没有必要的。而且速度真的很慢。

任何帮助表示赞赏 - 我怀疑这是重塑和转置的组合,但无法理解它。

谢谢。

Qua*_*ang 5

我认为你可以重塑整个数据和总和:

arr.reshape(*arr.shape[:2], -1, 2).sum(axis=-1)
Run Code Online (Sandbox Code Playgroud)