考虑一个有6列的numpy二维数组,我添加了空格来说明数组行有3对元素。
import numpy as np
a = np.array([[1,2, 3,4, 2,5],
[4,5, 6,7, 8,9],
[2,5, 1,3, 2,5],
[0,4, 0,4, 0,4],
[0,3, 1,7, 2,4]])
问题:我想生成5个新的数组b,c,d,e,f
,所有数组的行数都与a
相同,这些数组显示了数组a
中每一行的对置换。每一对元素的顺序不变,但整个对都被置换了。这个数组有3对元素,因此6个阵列的第一行将各自保持不同的对置换[1,2, 3,4, 2,5]
。
因此,在该示例中,阵列a,b,c,d,e,f
的第一行可以是:
[1,2, 3,4, 2,5], [1,2, 2,5, 3,4], [3,4, 1,2, 2,5], [3,4, 2,5, 1,2], [2,5, 1,2, 3,4], and [2,5, 3,4, 1,2]
数组a to f
的第二行将包含[4,5, 6,7, 8,9]
的六个对置换,依此类推。重要的是,数组行的每个新集合以相同的意义处理置换(即:订单)。
数组a to f
的第4行将全部保存相同的元素:[0,4, 0,4, 0,4]
我已经用np.lexsort
做过实验,我可以处理基于sympy.utilities.iterables import multiset_permutations
的单元素排列,但是我真的很困惑如何使用排列的元素对来设置6个数组。
1条答案
按热度按时间jslywgbw1#
嗯,它并不优雅,我也不引以为豪,但它应该可以非常有效地得到预期的输出,而不需要循环或置换。