小编Zar*_*tra的帖子

在固定维度的较小块中拆分 3D 数组的 Pythonic 方法

我想在不使用循环的情况下实现以下例程,只需使用 Numpy 函数或 ndarray 方法。这是代码:

def split_array_into_blocks( the_array, block_dim, total_blocks_per_row ):

    n_grid = the_array.shape[0]
    res    = np.empty( (n_grid, total_blocks_per_row, total_blocks_per_row, block_dim, 
    block_dim ) )

    for i in range( total_blocks_per_row  ):
        for j in range( total_blocks_per_row ):
        
            subblock          = the_array[ :, block_dim*i:block_dim*(i+1), block_dim*j:block_dim*(j+1) ]   
            res[ :, i,j,:,: ] = subblock 

    return res
Run Code Online (Sandbox Code Playgroud)

我尝试过“重塑”方法,以便:

the_array = the_array.reshape( ( n_grid, total_blocks_per_row, total_blocks_per_row, block_dim, block_dim) )
Run Code Online (Sandbox Code Playgroud)

但这似乎以某种方式改变了元素的顺序,并且块需要像在例程中一样存储。任何人都可以提供一种方法来做到这一点,并简要解释为什么 reshape 方法在这里给出不同的结果?(也许我还缺少使用 np.transpose() ?)

编辑:我想出了这个替代实现,但我仍然不确定这是否是最有效的方法(也许有人可以在这里说明):

def split_array_in_blocks( the_array, block_dim, total_blocks_per_row ):
       
    indx   = [ block_dim*j for …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

6
推荐指数
1
解决办法
174
查看次数

标签 统计

numpy ×1

python ×1

python-3.x ×1