我创建了一个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])]
但是我有时会得到重复的值!
欢迎提出想法!
预先感谢!
如果您不想重复,请尝试使用内置的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])]
如果我对您的理解正确,您想从所有可能的排列中随机选择3个(对于3元素数组,这里是6个)。您可以创建所有可能排列的数组,然后使用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]]