如何并行化阵列创建?

2024-06-16 13:52:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下算法:

  1. 迭代二维数组中的所有行:
  2. 对于每个处理过的行,我得到1d数组
  3. 用处理过的一维数组替换其他二维数组的行i

我想并行化进程,因为每一行进程都是独立的

我的代码:

def update_grid_row(self, grid, new_neighbours_grid, y):
    grid_row = np.zeros(GRID_WIDTH + 2)
    for x in range(0, GRID_WIDTH):
        xy_status = self.get_status_grid(x, y, grid, new_neighbours_grid)
        grid_row[x + 1] = xy_status

    return grid_row

def get_status_grid(self, x, y, new_grid, new_neighbours_grid):
    current_status = new_grid[x + 1][y + 1]
    living_neighbours = new_neighbours_grid[x][y]

    if living_neighbours < 2 or living_neighbours > 3:
        return int(0)
    elif current_status == 0 and living_neighbours == 3:
        return int(1)
    else:
        return current_status

def run  
    original_grid = self.grid
    new_grid = original_grid
    new_neighbours_grid = self.get_neighbours_grid(new_grid)
    for y in range(0, GRID_HEIGHT):
        grid_row = self.update_grid_row(original_grid, new_neighbours_grid, y)
        new_grid[:, y + 1] = grid_row.T
    self.grid = new_grid

Tags: selfnewgetreturn进程defstatus数组
1条回答
网友
1楼 · 发布于 2024-06-16 13:52:42

正如注释中指出的那样,多处理可能没有用处,但请注意,邻居计数对应于将网格与数组卷积

1 1 1
1 0 1
1 1 1

因此,使用scipy.signal.convolve2d将为您购买10到100的因子

相关问题 更多 >