获取数组的组合而不进行自重复

2024-04-23 11:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数组points的形状(3,3),它们是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点abc我得到的组合[[a, a, a], [a, a, b],..,[a, b, c],.., [c, c, c]]。我只想保留具有所有不同点的组合,即[a, b, c][b, c, a]


Tags: np数组productarraypointslist形状repeat
1条回答
网友
1楼 · 发布于 2024-04-23 11:27:30

对于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 ]]])

相关问题 更多 >