计算 Python 中较大 3D 数组中子数组的平均值
Calculate mean of sub arrays within a larger 3D array in Python
我有一个这样的 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()
但它并不是 return 我期望的结果。
到目前为止,我能得到的是使用
的列或行的平均值
numpy.mean(a, axis=0 or 1)
但这对我没用,因为它 return 整列或
矩阵中 4 个元素的行均值而不是均值。
最好的方法是什么?
我假设您想计算条目 (0,0)、(0,1)、(1,0)、(1,1) 的平均值,然后是 (2,2),( 2,3)、(3,2)、(3,3) 等等。
您 select 每隔一列和一行,四次,分别从索引 (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.]]])
我有一个这样的 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()
但它并不是 return 我期望的结果。
到目前为止,我能得到的是使用
的列或行的平均值numpy.mean(a, axis=0 or 1)
但这对我没用,因为它 return 整列或 矩阵中 4 个元素的行均值而不是均值。
最好的方法是什么?
我假设您想计算条目 (0,0)、(0,1)、(1,0)、(1,1) 的平均值,然后是 (2,2),( 2,3)、(3,2)、(3,3) 等等。
您 select 每隔一列和一行,四次,分别从索引 (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.]]])