【问题标题】:Find whether a numpy array is a subset of a larger array in Python查找 numpy 数组是否是 Python 中较大数组的子集
【发布时间】:2012-10-24 22:11:44
【问题描述】:

我有 2 个数组,为了简单起见,假设原始数组是一组随机数字:

import numpy as np
a=np.random.rand(N)

然后我从这个数组中采样并打乱一个子集:

b=np.array()  <------size<N

洗牌我不存储索引值,所以b是a的无序子集

有没有一种简单的方法可以得到 b 的原始索引,所以它们的顺序与 a 相同,例如,如果 b 的元素 2 在 a 中具有索引 4,则创建一个其分配的数组。

我可以逐个元素地使用 for 循环检查,但也许还有更 Pythonic 的方式

谢谢

【问题讨论】:

    标签: python arrays numpy subset


    【解决方案1】:

    我认为计算效率最高的做法是跟踪将ba 相关联的索引,因为b 已创建。

    例如,不是采样a,而是采样a的索引:

    indices = random.sample(range(len(a)), k)   # k < N
    b = a[indices]
    

    【讨论】:

    • 或者,使用 Numpy(OP 已经在使用):indices = np.arange(len(a)); np.random.shuffle(indices); indices = indices[:k]
    【解决方案2】:

    如果 a 恰好被排序,你可以这样做:

    >>> from numpy import array
    >>> a = array([1, 3, 4, 10, 11])
    >>> b = array([11, 1, 4])
    >>> a.searchsorted(b)
    array([4, 0, 2])
    

    如果a 未排序,您可能最好使用@unutbu 的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-12
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多