【发布时间】:2021-06-19 04:56:10
【问题描述】:
我的问题与Block mean of numpy 2D array 和block mean of 2D numpy array (in both dimensions) 有关(实际上只是更一般的情况)。我将通过简单的例子来解释这一点。
假设我们有6x6 2D 数组:
array([[7, 1, 6, 6, 4, 2],
[8, 5, 5, 6, 3, 5],
[3, 1, 7, 1, 3, 4],
[6, 8, 3, 2, 3, 3],
[8, 6, 7, 1, 1, 3],
[8, 5, 4, 5, 1, 4]])
现在这个矩阵中的每一行(和每一列)都被分配给三个社区之一(社区可以有不同的大小),例如array([0, 0, 1, 1, 1, 2]) 将代表此分配。现在我需要根据这个分配分割这个矩阵并计算块(切片)的平均值。这将产生3x3 块均值矩阵。例如社区对 (0,0) 的块(或切片)是一个 2x2 数组:
array([[7, 1],
[8, 5]])
意思是5.25。社区对 (0, 1) 的块是 2x3 数组:
array([[6, 6, 4],
[5, 6, 3]])
意思是5,等等..
块均值的结果数组应如下所示:
array([[5.25 , 5. , 3.5 ],
[5.33333333, 3.11111111, 3.33333333],
[6.5 , 3.33333333, 4. ]])
我的问题是如何有效地计算这个。现在我正在使用 for 循环——对于每一对社区,我得到适当的切片,计算该切片的平均值并将其存储在单独的矩阵中。但是我需要多次执行此操作,并且需要很多时间。
我不能真正使用(或者我不知道如何使用)reshape 的方法,因为它需要假设块大小相等。
【问题讨论】:
-
您应该显示循环版本。针对工作解决方案测试改进要容易得多。如果您提供有效的解决方案,我们的工作量也会减少。我怀疑我们能做的最好的事情就是在边缘调整解决方案。正如您所说的
numpy依赖于常规模式的解决方案不适用。