将numpy数组设置为d维超立方体内的行

时间:2019-07-26 02:09:26

标签: python arrays numpy

我有一个形状为n x d的numpy数组。每行代表R ^ d中的一个点。我只想将此数组过滤为单个点的每个轴上给定距离内的行-就像是d维超立方体。

在1维中,这可能是:

array[np.which(array < lmax and array > lmin)]

其中,lmax和lmin是与点+-距离有关的最大值和最小值。但是我想在d维中做到这一点。 d不是固定的,因此对其进行硬编码不起作用。我检查了上述方法在lmax和lmin是d长度向量的情况下是否可行,但是只是使数组变平了。

我知道我可以将矩阵和点插入scipy.spatial.distance之类的距离计算器中,并获得某种距离度量,但这可能比一些简单的过滤(如果存在)要慢。

我可能必须进行数百万次计算,这一事实意味着理想情况下,我想要一个快速的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以尝试一下。

def test(array):
    large = array > lmin
    small = array < lmax
    return array[[i for i in range(array.shape[0])
        if np.all(large[i]) and np.all(small[i])]]

对于每个iarray[i]是一个向量。向量的所有元素都应在[lmin,lmax]范围内,并且此计算过程可以向量化。