问题描述
给定任何整数 np.arange(k)
值的 k
,我试图找到它的所有 (k - 1)
-组合。
k = 4
示例(最好按此顺序):
array([[1,2,3],[0,1,2]])
使用常规 python,这是有效的:
[[j for j in range(k) if i != j] for i in range(k)]
但我的目标是更numpythonic的方法。这是我迄今为止最好的一次拍摄:
np.rot90(np.arange(k).repeat(k - 1).reshape((k - 1,k)))
是否有使用 numpy 更简洁的方法,还是我应该只使用普通的 python?
解决方法
hpaulj 已经在他的评论中指出了这一点,但这里有一种使用 itertools combinations 来解决这个问题的方法:
from itertools import combinations
import numpy as np
k = 4
a = np.array([*combinations(np.arange(k),3)])
print(a)
也许您还想看看使用 this post 来实现类似功能的 sympy library。