I want to find block mean of a 2D array in NumPy. For simplicity, let us assume that the array is as follows:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])
I want to divide this array into 3 blocks of size 2x4, and then find the mean of all three blocks (so that the shape of the mean is 2x4. The first block is formed by the first 4 columns, the next one by the next 4 columns and so on. So my blocks are:
array([[0, 1, 2, 3],
[12, 13, 14, 15]])
array([[ 4, 5, 6, 7],
[16, 17, 18, 19]])
array([[ 8, 9, 10, 11],
[20, 21, 22, 23]])
I can use a loop to do this but I get a feel that it would be better to first convert this array into a 3D array by reshape
and then use the mean
method on the 3D array along the third axis. This could be similar to this question.
Would appreciate if someone can provide me with:
1). An appropriate Pythonic command to do the block mean without even converting to 3D, if such a trick exists.
2). If not an appropriate Pythonic command to do the 2D to 3D conversion.
3). An insight whether it would be more efficient (in terms of space) to do it using a loop or by using the command above.