此问题已经在这里有了答案:
说我有一个三维超立方体,它在所有尺寸的[0,1]
之间为界:
bounds = np.array([[0., 1.],
[0., 1.],
[0., 1.]])
我有以下代码来获取此超立方体角的坐标。
from itertools import combinations
def hypercube_corners(bounds):
ndim = bounds.shape[0]
bounds_flattened = bounds.reshape(2*ndim)
return np.array(list(set(map(tuple, combinations(bounds_flattened, ndim)))))
hypercube_corners(bounds)
array([[0., 1., 1.],
[1., 1., 0.],
[1., 1., 1.],
[1., 0., 0.],
[0., 0., 1.],
[1., 0., 1.],
[0., 0., 0.],
[0., 1., 0.]])
但是,如果我将此代码用于更大数量的尺寸,则由于完成组合的原因,要花很长时间才能完成它。
是否有更快的方法来获取超立方体角的坐标?
从here找到了答案。
bounds = np.array([[0., 1.],
[0., 1.],
[0., 1.]])
def hypercube_corners( bounds):
lb = bounds[:,0]
ub = bounds[:,1]
return np.array(list(product(*zip(lb,ub))))