繁体   English   中英

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

[英]subsetting numpy array to rows within a d-dimensional hypercube

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

在1维中,这可能是:

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

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

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

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

你可以试试看

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM