以随机方式生成没有0值的矩阵

时间:2019-04-02 10:07:50

标签: python python-3.x random

我正在尝试以区间[-5,-1]和[1,5]的方式随机创建矩阵。如何创建一个考虑到具有随机值的间隔(无0值)的矩阵?

我尝试使用numpy的randintpiecewise来做到这一点。在第一种情况下,不可能指示2个间隔,在第二种情况下,当值接近0(大于-1且小于1)时生成的随机数始终是相同的。

    x=np.random.randint(-5,5,(2,3))
    np.piecewise(x, [x <= 1, x >=-1 ], [np.random.randint(-5,-1), np.random.randint(1,5)])

我想以这种方式创建一个没有0值的矩阵:

  [-2,-3,-1
    1,-2, 3]

4 个答案:

答案 0 :(得分:6)

您可以创建一个随机的正矩阵,并将其按元素乘以一个随机符号:

np.random.randint(1,6,(2,3))*np.random.choice([-1,1],(2,3))

请记住,这仅在间隔大约为0时才有效,例如(-6,6)(排除0)。

答案 1 :(得分:5)

一种选择是简单地将值0“重新映射”到其中一个边界:

import numpy as np

np.random.seed(100)
x = np.random.randint(-5, 5, (4, 8))
x[x == 0] = 5
print(x)
# [[ 3  3 -2  2  2 -5 -1 -3]
#  [ 5 -3 -3 -3 -4 -5  3 -1]
#  [-5  4  1 -3 -1 -4  5 -2]
#  [-1 -1 -2  2 -4 -4  2  2]]

或者您可以使用np.random.choice

import numpy as np

np.random.seed(100)
np.random.choice(list(range(-5, 0)) + list(range(1, 6)), size=(4, 8))
print(x)
# [[ 3  3 -2  2  2 -5 -1 -3]
#  [ 5 -3 -3 -3 -4 -5  3 -1]
#  [-5  1 -3 -1 -4  5 -2 -1]
#  [-1 -2  2 -4 -4  2  2 -5]]

答案 2 :(得分:2)

np.random.choice(list(range(-5,0))+list(range(1,6)),(5,5))

a = list(range(-5,6))
a.remove(0)
np.random.choice(a,(5,5))

答案 3 :(得分:0)

import numpy as np
a = np.arange(-5,6)
np.random.choice(list(numpy.select([a != 0, a == 0], [a, -1])),(5,5))

这是定义列表条件的另一种方法。您可以通过编辑条件来省略数组'a'中所需的任何数字。在上面的数字中,等于零的数字返回-1,对于等于零的数字,返回相同的数字。