我试图在区间[-5,-1]和[1,5]中以随机方式创建矩阵。如何使用随机值考虑间隔(无0值)来创建矩阵?
我试着用randint
的numpy和piecewise
来做。在第一种情况下,不能指示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]
您可以创建一个随机正矩阵,并将其元素乘以随机符号:
np.random.randint(1,6,(2,3))*np.random.choice([-1,1],(2,3))
请记住,只有当间隔在0
附近时,这才有效,例如: (-6,6)
(0
除外)。
一种选择是简单地将值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]]
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))
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和数字不等于零返回相同的数字。