繁体   English   中英

获取不重复的数组组合

[英]Get combinations of array without self repetition

我有以下形状(3,3)的数组points ,它们是 3D 点

[[-0.20592405  0.33034652  1.0430001 ]
 [-0.23757319  0.29612657  1.03800011]
 [-0.304515    0.34571081  1.20400012]]

我需要找到这三点的所有组合。 我正在执行以下操作:

comb = np.array(list(itertools.product(points.tolist(), repeat=3)))

我得到

[[[-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]
  [-0.304515    0.34571081  1.20400012]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]
  [-0.20592405  0.33034652  1.0430001 ]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]
  [-0.23757319  0.29612657  1.03800011]]

 [[-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]
  [-0.304515    0.34571081  1.20400012]]]

这给了我所有的组合,但我想丢弃重复的组合。 所以,假设 3D 点a , b , c我得到的组合是[[a, a, a], [a, a, b],..,[a, b, c],.., [c, c, c]] 我只想保留具有所有不同点的组合,即[a, b, c][b, c, a]等。

使用itertools.combinations ,只有一个:

l1=[[-0.20592405,  0.33034652,  1.0430001 ],
    [-0.23757319,  0.29612657,  1.03800011],
    [-0.304515,    0.34571081,  1.20400012]]
comb = np.array(list(itertools.combinations(l1, 3)))
#array([[[-0.20592405,  0.33034652,  1.0430001 ],
#        [-0.23757319,  0.29612657,  1.03800011],
#        [-0.304515  ,  0.34571081,  1.20400012]]])

使用itertools.permutations

comb = np.array(list(itertools.permutations(l1, 3)))

comb的价值:

array([[[-0.20592405,  0.33034652,  1.0430001 ],
        [-0.23757319,  0.29612657,  1.03800011],
        [-0.304515  ,  0.34571081,  1.20400012]],

       [[-0.20592405,  0.33034652,  1.0430001 ],
        [-0.304515  ,  0.34571081,  1.20400012],
        [-0.23757319,  0.29612657,  1.03800011]],

       [[-0.23757319,  0.29612657,  1.03800011],
        [-0.20592405,  0.33034652,  1.0430001 ],
        [-0.304515  ,  0.34571081,  1.20400012]],

       [[-0.23757319,  0.29612657,  1.03800011],
        [-0.304515  ,  0.34571081,  1.20400012],
        [-0.20592405,  0.33034652,  1.0430001 ]],

       [[-0.304515  ,  0.34571081,  1.20400012],
        [-0.20592405,  0.33034652,  1.0430001 ],
        [-0.23757319,  0.29612657,  1.03800011]],

       [[-0.304515  ,  0.34571081,  1.20400012],
        [-0.23757319,  0.29612657,  1.03800011],
        [-0.20592405,  0.33034652,  1.0430001 ]]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM