我有一个像这样的3D数组:
a = ([[[25, 4, 54], [58, 14, 27], [35, 40, 62], [53, 72, 86], [87, 4, 51], [89, 34, 22]],
[[61, 99, 89], [52, 93, 18], [ 0, 38, 12], [99, 10, 98], [79, 91, 75], [31, 59, 3]],
[[22, 9, 63], [37, 26, 3], [54, 40, 39], [36, 87, 44], [81, 10, 7], [75, 29, 20]],
[[55, 30, 44], [21, 36, 98], [56, 52, 78], [80, 76, 32], [72, 26, 17], [15, 81, 37]],
[[73, 37, 28], [30, 44, 75], [66, 59, 61], [34, 57, 56], [13, 51, 73], [20, 51, 94]],
[[86, 38, 69], [85, 74, 91], [25, 90, 58], [50, 12, 79], [24, 96, 28], [73, 2, 17]]])
我试图计算每个后续的4个元素的平均值 随后,整个矩阵中的行和列按顺序排列 具有小方块意味着大矩阵的样本。我期待 有一个结果整数矩阵,如:
([[[49, 52, 47], [47, 40, 64],
......等等......
我尝试使用切片步骤,然后使用像
这样的平均功能a[::2].mean()
但它不会返回我期望的结果。
到目前为止,我能得到的是使用
的列或行的平均值numpy.mean(a, axis=0 or 1)
但这对我没用,因为它会返回整个列或 行均值而不是矩阵中4个元素的平均值。
这样做的最佳方式是什么?
答案 0 :(得分:0)
我假设您要计算条目(0,0),(0,1),(1,0),(1,1),然后是(2,2)的平均值,(2, 3),(3,2),(3,3)等。
您可以分别从索引(0,0),(0,1),(1,0)和(1,1)开始选择每隔一列和每行四次。然后,除以4并舍入结果:
np.round((a[::2,::2] + a[1::2,::2] + a[::2,1::2] + a[1::2,1::2]) / 4.0)
这会给你
array([[[ 49., 52., 47.],
[ 47., 40., 64.],
[ 72., 47., 38.]],
[[ 34., 25., 52.],
[ 56., 64., 48.],
[ 61., 36., 20.]],
[[ 68., 48., 66.],
[ 44., 54., 64.],
[ 32., 50., 53.]]])