Numpy数组填充随机数,以便您只沿x / y轴将值更改为1

时间:2015-07-28 11:56:38

标签: python arrays numpy random

我知道如何创建一个充满随机数的numpy数组,例如:np.random.randint(0, 100, (5, 5))

但是如何创建一个填充了随机数的numpy数组,以便两个相邻单元格之间的差异为1或更小?

由于

1 个答案:

答案 0 :(得分:4)

每一行可以相差1.因此生成一系列差异:

In [83]: H, W = 5, 5

In [84]: np.random.randint(-1, 2, size=(H,1))
Out[84]: 
array([[ 1],
       [-1],
       [-1],
       [-1],
       [ 0]])

现在找到累积总和:

In [85]: np.add.accumulate([[ 1], [-1], [-1], [-1], [ 0]])
Out[85]: 
array([[ 1],
       [ 0],
       [-1],
       [-2],
       [-2]])

同样,每列可以相差1.因此,再次生成一系列差异, 并找到累积总和:

In [86]: np.add.accumulate(np.random.randint(-1, 2, size=(1,W)), axis=1)
Out[86]: array([[1, 1, 2, 1, 1]])

现在将这两个累积总和加在一起。广播创建一个2D数组:

import numpy as np

H, W = 5, 5
x = np.add.accumulate(np.random.randint(-1, 2, size=(H,1)), axis=0)
y = np.add.accumulate(np.random.randint(-1, 2, size=(1,W)), axis=1)
out = x + y
print(out)

打印一个随机数组,例如

[[ 1  0 -1  0 -1]
 [ 2  1  0  1  0]
 [ 3  2  1  2  1]
 [ 3  2  1  2  1]
 [ 2  1  0  1  0]]

您可以向此数组添加常量,以生成具有相同属性的其他随机数组。