将 2D 数组分割成更小的 2D 子数组
问题:
我们可以将 2D 数组细分为更小的二维数组在NumPy?
示例:
将一个 2x4 数组转换为两个 2x2 数组:
[[1,2,3,4] -> [[1,2] [3,4] [5,6,7,8]] [5,6] [7,8]]
机制:
更好的方法是重塑数组,而不是创建新数组使用 reshape() 现有数组并使用 swapaxes() 交换轴。
块形函数:
下面是块形函数的实现函数:
def blockshaped(arr, nrows, ncols): """ Partitions an array into blocks. Args: arr (ndarray): The original array. nrows (int): Number of rows in each block. ncols (int): Number of columns in each block. Returns: ndarray: Partitioned array. """ h, w = arr.shape assert h % nrows == 0, f"{h} rows is not evenly divisible by {nrows}" assert w % ncols == 0, f"{w} cols is not evenly divisible by {ncols}" return (arr.reshape(h // nrows, nrows, -1, ncols) .swapaxes(1, 2) .reshape(-1, nrows, ncols))
演示:
np.random.seed(365) c = np.arange(24).reshape((4, 6)) print(c) print(blockshaped(c, 2, 3))
替代解决方案:
SuperBatFish 的 blockwise_view 提供了另一个选项,提供不同的块排列和基于视图的表示。
以上是如何在 NumPy 中将 2D 数组分割成更小的 2D 子数组?的详细内容。更多信息请关注PHP中文网其他相关文章!