问题:用 10 个 1、20 个 2、30 个 3 随机填充一个 10 x 10 的零数组。
我实际上不必使用数组,而只需要值所在位置的坐标。就数组而言,它更容易考虑。
我为此编写了几个解决方案,但它们似乎都不是直截了当且非 Pythonic。我希望有人能给我一些见解。我的方法一直使用 0--99 的线性数组,随机选择 (np.random.choice) 10 个值,从数组中删除它们,然后选择 20 个随机值。之后,我将线性位置转换为 (y,x) 坐标。
import numpy as np
dim = 10
grid = np.arange(dim**2)
n1 = 10
n2 = 20
n3 = 30
def populate(grid, n, dim):
pos = np.random.choice(grid, size=n, replace=False)
yx = np.zeros((n,2))
for i in xrange(n):
delPos = np.where(grid==pos[i])
grid = np.delete(grid, delPos)
yx[i,:] = [np.floor(pos[i]/dim), pos[i]%dim]
return(yx, grid)
pos1, grid = populate(grid, n1, dim)
pos2, grid = populate(grid, n2, dim)
pos3, grid = populate(grid, n3, dim)
额外 假设当我填充 1 时,我希望它们都在“数组”的一半上。我可以使用我的方法(从 grid[dim**2/2:] 采样)来做到这一点,但我还没有弄清楚如何对其他建议做同样的事情。