一种获取超立方体角点坐标的更快方法[重复]

问题描述 投票:1回答:1

此问题已经在这里有了答案:

说我有一个三维超立方体,它在所有尺寸的[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.]])

但是,如果我将此代码用于更大数量的尺寸,则由于完成组合的原因,要花很长时间才能完成它。

是否有更快的方法来获取超立方体角的坐标?

python python-3.x permutation itertools combinatorics
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))))
© www.soinside.com 2019 - 2024. All rights reserved.