【问题标题】:Numpy: Finding correspondencies in one array by uniques of other array, arbitrary lengthNumpy:通过另一个数组的唯一性,任意长度在一个数组中查找对应关系
【发布时间】:2018-07-27 06:33:32
【问题描述】:

我有一个问题,我有两个数组,一个带有可以多次出现的标识符,让我们说

import numpy as np
ind = np.random.randint(0,10,(100,))

另一个长度相同并包含一些信息,在本例中为布尔值,用于由 ind 标识的每个元素。它们被相应地排序。

dat = np.random.randint(0,2,(100,)).astype(np.bool8)

我正在寻找一种(更快?)方法来执行以下操作:为所有元素(由 ind 定义)执行 np.any()。如示例中所示,每个元素的出现次数是随机的。我现在做的是

result = np.empty(np.unique(ind))
for i,uni in enumerate(np.unique(ind)):
    result[i] = np.any(dat[ind==uni])

这有点慢。有什么想法吗?

【问题讨论】:

    标签: python arrays sorting numpy


    【解决方案1】:

    方法#1

    索引inddat 以选择需要检查的那些,使用np.bincount 获取分箱计数,并查看哪些分箱比出现次数多-

    result = np.bincount(ind[dat])>0
    

    如果ind 有负数,用min 值偏移它-

    ar = ind[dat]
    result = np.bincount(ar-ar.min())>0
    

    方法 #2

    还有一个np.unique -

    unq = np.unique(ind[dat])
    n = len(np.unique(ind))
    result = np.zeros(n,dtype=bool)
    result[unq] = 1
    

    我们可以使用pandas得到n

    import pandas as pd
    n = pd.Series(ind).nunique()
    

    方法#3

    还有一个indexing -

    ar = ind[dat]
    result = np.zeros(ar.max()+1,dtype=bool)
    result[ar] = 1
    

    【讨论】:

    • 谢谢,这很好用。我使用#3,因为由于 numba 功能受到限制
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多