编程语言
首页 > 编程语言> > python – 像素网格中非相邻单元的随机采样

python – 像素网格中非相邻单元的随机采样

作者:互联网

假设我们有一个n * n网格.我们想选择k<< n该网格的不相邻的随机单元格.如果我们使用包含0和1的2D Numpy数组模拟此网格,那么在Numpy / Python中执行此操作的最有效方法是什么?

有效示例:

无效示例:

解决方法:

这是拒绝抽样的直接实现.可能有一种更快的方式来进行邻接检查而不是query_pairs事物(在这种情况下也会检查冲突),因为你只想测试在这个距离阈值内是否至少有一对.

import numpy as np
from scipy.spatial import cKDTree as kdtree

n = 100
k = 50

valid = False

while not valid:
    # generate k grid indices
    coords_flat = np.random.random_integers(0, n ** 2 - 1, size=k)
    coords = np.unravel_index(coords_flat, dims=(n, n))
    # test there are no adjacent cells
    transposed = np.transpose(coords)
    valid = len(kdtree(transposed).query_pairs(1.0)) == 0

print(coords)

看看结果:

import matplotlib.pyplot as plt
grid = np.zeros((n, n), dtype=np.bool)
grid[coords] = True
plt.imshow(grid)
plt.savefig('result.png')

标签:random-sample,python,numpy
来源: https://codeday.me/bug/20190823/1695125.html