поменять местами элементы в массиве numpy - PullRequest
0 голосов
/ 27 апреля 2020

Я создал массив numpy

a=np.array([1,2,3])
a
>>> array([1, 2, 3])

Я хотел бы изменить положение элементов.

Мой ожидаемый результат должен состоять только из этих трех моделей

[array([1, 2, 3]),
 array([2, 3, 1]),
 array([1, 3, 2])]

Я попытался с библиотекой перестановок, как показано ниже

b=[]
for i in range(3):
    b.append(np.random.permutation(a)

Фактический вывод:

[array([1, 3, 2]), 
array([1, 3, 2]), 
array([1, 2, 3])]

Но я получаю повторяющиеся значения несколько раз !!

Идеи приветствуются !!

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Если я вас правильно понимаю, вы хотите случайным образом выбрать 3 из всех возможных перестановок (здесь 6 для 3-элементного массива). Вы можете создать массив всех возможных перестановок, а затем использовать np.random.choice, чтобы случайным образом выбрать 3 из них. Вам необходимо установить флаг replace на False, чтобы избежать повторений:

import itertools

a = np.array(list(itertools.permutations([1,2,3])))
a = a[np.random.choice(a.shape[0], 3, replace=False), :]

пример вывода:

[[1 3 2]
 [2 1 3]
 [1 2 3]]
0 голосов
/ 27 апреля 2020

Если вы не хотите повторений, попробуйте встроенную утилиту itertools.permutations(). Без каких-либо аргументов он вернет все возможные перестановки:

>>> import itertools
>>> list(itertools.permutations([1,2,3]))
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

(отмечая, что в трехэлементном списке 6 перестановок)

Или с numpy массивами:

>>> import numpy as np
>>> [np.array(a) for a in (itertools.permutations([1,2,3]))]
[array([1, 2, 3]), array([1, 3, 2]), array([2, 1, 3]), array([2, 3, 1]), array([3, 1, 2]), array([3, 2, 1])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...