Перестановка в ряд в Python - PullRequest
       2

Перестановка в ряд в Python

0 голосов
/ 26 ноября 2018

У меня есть два парных массива, что означает, что элемент 1 в обоих массивах должен иметь одинаковый индекс.Я хочу переставить эти элементы.В настоящее время я пробовал np.random.permutation, но, похоже, это не дает правильного ответа.

Например, если двумя массивами являются [1,2,3] и [4,5,6], одна из возможных перестановок будет [4,2,3] и [1,5,6],

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018
a=np.array([1, 2, 3])
b=np.array([4, 5, 6])
random_arr=np.random.choice([0, 1], size=(len(a),)) # Generate a random array of 0s and 1s, let's say arr([0,0,1])
a1=random_arr*a + (1-random_arr)*b                  # arr([0,0,1])*arr([1,2,3]) + arr([1,1,0])*arr([4,5,6]) = arr([4, 5, 3])
b1=random_arr*b + (1-random_arr)*a                  # arr([0,0,1])*arr([4,5,6]) + arr([1,1,0])*arr([1,2,3]) = arr([1, 2, 6])
a=a1
b=b1

Прогон 1 кода выше:

a
Out[188]: array([4, 2, 6])
b
Out[189]: array([1, 5, 3])

Прогон 2:

a
Out[191]: array([4, 5, 3])    
b
Out[192]: array([1, 2, 6])
0 голосов
/ 26 ноября 2018

Вы можете использовать np.choose:

toss=np.random.randint(0,2,len(x))
print(np.choose(toss,[x,y]))
print(np.choose(toss,[y,x]))
#[1 5 6]
#[4 2 3]
0 голосов
/ 26 ноября 2018

Вы можете stack свои массивы и выбрать случайный столбец для каждой строки, используя choice.

Настройка

a = np.array([1,2,3])
b = np.array([4,5,6])    
v = np.column_stack((a,b))

# array([[1, 4],
#        [2, 5],
#        [3, 6]])

np.random.seed(1)
choices = np.random.choice(v.shape[1], v.shape[0])
# array([1, 1, 0])

Наконец, к индексу:

v[np.arange(v.shape[0]), choices]

array([4, 5, 3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...