-1

我创建了一个 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])]

但是我有时会得到重复的值!

欢迎提出想法!!

提前致谢!!

4

2 回答 2

0

如果您不想重复,请尝试使用内置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)]

(注意 3 元素列表有 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])]
于 2020-04-27T18:08:13.993 回答
0

如果我理解正确,您想从所有可能的排列中随机选择 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]]
于 2020-04-27T18:15:56.030 回答