如何初始化一个数组,每个元素保持与其邻居不同的值

时间:2017-09-23 23:41:15

标签: python arrays numpy

我有一个用python编写的矩阵或多个数组,数组中的每个元素都是一个0到7之间的整数,我如何随机地初始化这个矩阵或多个数组,这样每个元素都有一个值,是不是与它的4个邻居(左,右,上,下)的值不同?它可以在numpy中实现吗?

2 个答案:

答案 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]