您可以使用np.vsplit 将数组垂直拆分为多个子数组。同样,您可以使用np.hsplit 将数组水平拆分为多个子数组。为了更好地理解这一点,请检查使用 np.vsplit 和 np.hsplit 方法的通用 resample 函数。
使用这个:
def ressample(arr, N):
A = []
for v in np.vsplit(arr, arr.shape[0] // N):
A.extend([*np.hsplit(v, arr.shape[0] // N)])
return np.array(A)
示例 1:
给定的 2D 数组的形状为 4x4,我们希望将其子采样到形状为 2x2 的块中。
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
print(ressample(arr, 2)) #--> chunk size 2
输出 1:
[[[ 1 2]
[ 5 6]]
[[ 3 4]
[ 7 8]]
[[ 9 10]
[13 14]]
[[11 12]
[15 16]]]
示例 2:
考虑给定的二维数组包含 8 行和 8 列。现在我们将这个数组二次采样成 4x4 形状的块。
arr = np.random.randint(0, 10, 64).reshape(8, 8)
print(ressample(arr, 4)) #--> chunck size 4
示例输出 2:
[[[8 3 7 5]
[7 2 6 1]
[7 9 2 2]
[3 1 8 8]]
[[2 0 3 2]
[2 9 0 8]
[2 6 3 9]
[2 4 4 8]]
[[9 9 1 8]
[9 1 5 0]
[8 5 1 2]
[2 7 5 1]]
[[7 8 9 6]
[9 0 9 5]
[8 9 8 3]
[7 3 6 3]]]