我拥有的是一个 numpy 数组的数组(一个 2d numpy 数组)。
my_array = [
[1, 2, 3, 4]
[1, 2, 3, 4]
[2, 3, 4, 5]
[2, 3, 4, 5]
]
我想把它变成:
proximity = 2
my_array = [
[1.5, 1.5, 3.5, 3.5]
[1.5, 1.5, 3.5, 3.5]
[2.5, 2.5, 4.5, 4.5]
[2.5, 2.5, 4.5, 4.5]
]
我有这段代码:
proximity = 2
for i in range(0, len(my_array), proximity):
for j in range(0, len(my_array), proximity):
ii = i + proximity
jj = j + proximity
my_array[i:ii, j:jj] = np.average(my_array[i:ii, j:jj])
现在我当前的解决方案可以解决问题,但我想知道纯 numpy 解决方案,一个没有我使用的 2 个“for”循环的解决方案。
假设它的目标是方阵,将数组重塑为方阵子矩阵并将其均值复制到初始形状:
my_array = my_array.reshape(-1, 2, 2).mean(-1).repeat((2, 2), axis=-1)
print(my_array)
[[1.5 1.5 3.5 3.5]
[1.5 1.5 3.5 3.5]
[2.5 2.5 4.5 4.5]
[2.5 2.5 4.5 4.5]]
如果保证每个维度都能被
proximity
整除,你可以重塑:
(my_array.reshape(rows//2, proximity, cols//2, proximity)
.mean(axis=(1,3))
.repeat(proximity, axis=0)
.repeat(proximity, axis=1)
)
输出:
array([[1.5, 1.5, 3.5, 3.5],
[1.5, 1.5, 3.5, 3.5],
[2.5, 2.5, 4.5, 4.5],
[2.5, 2.5, 4.5, 4.5]])