numpy Python使用条件对嵌套的for循环进行矢量化

ar5n3qh5  于 2023-02-04  发布在  Python
关注(0)|答案(1)|浏览(123)

我如何向量化一个包含条件的嵌套for循环?我试图在一个非常大的数组中得到一个行/列窗口的列表。下面是一个嵌套循环在给定窗口大小的情况下遍历所有行和列的快速过程,但我想知道是否有任何方法可以让它更快。

def get_windows(width, height, win_size):
    windows = list()
    
    for i in range(0, width, win_size):
        if i + win_size < width:
            numCols = win_size
        else:
            numCols = width - i
        for j in range(0, height, win_size):
            if j + win_size< height:
                numRows = win_size
            else:
                numRows = height - j
            window = [i, j, numCols, numRows]
            windows.append(window)
    
    return windows

def sliding_window(arr, windows):
    for i in windows:
        win_arr = arr[0:3, i[0]:i[0]+i[2], i[1]:i[1]+i[2]]
        win_arr = np.transpose(win_arr, [1, 2, 0])
4ioopgfo

4ioopgfo1#

我认为您可以使用对numpy.array_split的重复调用来实现您的目标。

import numpy as np

def sliding_window(arr, win_size):
    for win_arr_x in np.array_split(arr, win_size, axis=-2):
        for win_arr in np.array_split(win_arr_x, win_size, axis=-1):
            win_arr = np.transpose(win_arr, [1, 2, 0])

相关问题