Python Numpy:通过另一个数组的唯一性(任意长度)查找一个数组中的对应关系
我有一个问题,我有两个数组,一个带有标识符,可以多次出现Python Numpy:通过另一个数组的唯一性(任意长度)查找一个数组中的对应关系,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,我有一个问题,我有两个数组,一个带有标识符,可以多次出现 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()。每个元素出现的次数是
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])
这有点慢。有什么想法吗?方法#1
索引ind
和dat
要选择需要检查的箱子,请使用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
还有一个带有索引的-
ar = ind[dat]
result = np.zeros(ar.max()+1,dtype=bool)
result[ar] = 1
谢谢,这个很好用。我在使用#3,因为我的功能受到了限制,因为