首页 > 解决方案 > 交换numpy数组中元素的位置

问题描述

我创建了一个 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.xnumpypermutationnumpy-random

解决方案


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

推荐阅读