如何解决获取数组组合而无需自我重复
我有以下形状 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 点 a
、b
、c
,我得到了 [[a,a,a],[a,b],..,b,c],[c,c,c]]
的组合。我只想保留具有所有不同点的组合,即 [a,c]
、[b,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.23757319,# [-0.304515,1.20400012]]])
使用itertools.permutations
:
comb = np.array(list(itertools.permutations(l1,3)))
comb
的值:
array([[[-0.20592405,1.20400012]],[[-0.20592405,1.20400012],1.03800011]],[[-0.23757319,[-0.20592405,1.0430001 ]],[[-0.304515,1.0430001 ]]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。