【问题标题】:subsetting numpy array to rows within a d-dimensional hypercube将 numpy 数组子集到 d 维超立方体中的行
【发布时间】:2019-07-26 23:50:56
【问题描述】:

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

在一维中,这可能是:

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

其中 lmax 和 lmin 是与点+距离相关的最大值和最小值。但我想在 d 维度上做到这一点。 d 不是固定的,所以硬编码是行不通的。我检查了上述方法是否适用于 lmax 和 lmin 是 d 长度向量的情况,但它只是使数组变平。

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

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

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你可以试试这个。

    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]范围内,这个计算过程可以向量化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-04
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多