#python #python-3.x #random
#python #python-3.x #Случайный
Вопрос:
Я пытаюсь создать матрицу случайным образом в интервалах [-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]
Комментарии:
1. Рассматриваете ли вы возможность использования random.randrange(…) с какой-либо дополнительной опцией numpy array?
Ответ №1:
Вы можете создать случайную положительную матрицу и умножить ее по элементам на случайный знак:
np.random.randint(1,6,(2,3))*np.random.choice([-1,1],(2,3))
Имейте в виду, что это работает только в том случае, если интервал равен примерно 0
, например (-6,6)
( 0
исключен).
Ответ №2:
Один из вариантов — просто «переназначить» значение 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]]
Комментарии:
1. Имейте в виду, что первое решение делает распределение неравномерным!
2. @fulaphex Делает это? Как так? Не все ли 10 значений имеют одинаковую вероятность выбора?
3. Извините, я неправильно истолковал границы функции randint. Но я думаю, что все еще есть ошибка, я думаю, что она должна быть
x = np.random.randint(-5, 5, (4, 8))
. Из документов высокое значение на единицу выше самого большого целого числа, которое нужно нарисовать.
Ответ №3:
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))
Ответ №4:
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, а для чисел, не равных нулю, возвращают то же число.
Комментарии:
1. Спасибо, но это создает только случайное число между интервалами, но мне нужна матрица