numpy数组中元素的交换位置

问题描述 投票:0回答:2

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

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

欢迎提出想法!

预先感谢!

python-3.x numpy permutation numpy-random
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])]

0
投票

如果我对您的理解正确,您想从所有可能的排列中随机选择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]]
© www.soinside.com 2019 - 2024. All rights reserved.