首先需要导入NumPy库。
import numpy as np
创建一个数组,输入每个连续子数组的值。
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
现在我们可以根据需要定义每个连续子数组的大小,这里定义了大小为 2×2:
window_size = (2, 2)
现在我们将创建一个展平版本的数组,以便我们可以计算指定大小的每个连续子数组的平均值。
shape = (arr.shape[0] - window_size[0] + 1, arr.shape[1] - window_size[1] + 1) + window_size
strides = (arr.strides[0], arr.strides[1]) + arr.strides
a = np.lib.stride_tricks.as_strided(arr, shape=shape, strides=strides)
这个a数组就是我们要找的每个连续子数组的展平版本了。现在我们计算每个这样的数组的平均值:
result = a.mean(axis=(2,3))
完整的代码如下所示:
import numpy as np
# 创建数组
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 定义连续子数组大小
window_size = (2, 2)
# 创建展平版本数组
shape = (arr.shape[0] - window_size[0] + 1, arr.shape[1] - window_size[1] + 1) + window_size
strides = (arr.strides[0], arr.strides[1]) + arr.strides
a = np.lib.stride_tricks.as_strided(arr, shape=shape, strides=strides)
# 计算每个数组的平均值
result = a.mean(axis=(2,3))
# 输出结果
print(result)
输出结果为
[[ 3.5 4.5 5.5]
[ 7.5 8.5 9.5]]
这里我们输入的数组是一个 3×4 的数组,使用大小为 2×2 的连续子数组。输出结果是一个 2×3 的数组,其中每个元素是它对应的连续子数组的平均值。