我有一个用python编写的矩阵或多个数组,数组中的每个元素都是一个0到7之间的整数,我如何随机地初始化这个矩阵或多个数组,这样每个元素都有一个值,是不是与它的4个邻居(左,右,上,下)的值不同?它可以在numpy中实现吗?
答案 0 :(得分:1)
您可以编写自己的矩阵初始值设定项。 通过每个i的数组[i] [j],j选择0到7之间的随机数。 如果数字等于左边元素:array [i] [j-1]或上面的数字:array [i-1] [j]再次重新生成它。 你有2/7的概率遇到这样的坏情况,4/49连续两次,连续3连续8/343等等。概率很快下降。 矩阵中n个元素的平均大小写复杂度为O(n)。
答案 1 :(得分:0)
可能让你开始的一个更简单的问题是对1d数组做同样的事情。纯python解决方案看起来像:
def sample_1d(n, upper):
x = [random.randrange(upper)]
for i in range(1, n)"
xi = random.randrange(upper - 1)
if xi >= x:
xi += 1
x.append(xi)
return x
您可以将其矢量化为:
def sample_1d_v(n, upper):
x = np.empty(n)
x[0] = 0
x[1:] = np.cumsum(np.random.randint(1, upper, size=n-1)) % upper
x += np.random.randint(upper)
return
这里的技巧是注意,如果相邻的值必须不同,那么它们的值之间的差异均匀分布在[1,upper]