Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy:通过另一个数组的唯一性(任意长度)查找一个数组中的对应关系_Python_Arrays_Sorting_Numpy - Fatal编程技术网

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,因为我的功能受到了限制,因为