是否有一个Numpy函数等同于
[array == value for value in np.unique(array)]
或
[np.where(array == value) for value in np.unique(array)]
如果不是,更有效的方法呢?当你可以一次完成时,这些遍历数组len(np.unique(array))
次:
indices = defaultdict(list)
for index, value in enumerate(array):
indices[value].append(index)
我想要一个不需要显式循环的解决方案。
答案 0 :(得分:2)
如果您想要的是具有多个唯一编号条件的面具,则可以使用np.unique中的return_inverse
执行此操作:
拥有样本数组
>>> a = np.random.randint(5, 10, size=100) # 100 [5-10) random numbers
及其独特的数字和逆映射
>>> unique, inverse = np.unique(a, return_inverse=True)
我们可以创建一个具有额外尺寸的容器(每个唯一编号a.shape
+ 1维)
>>> indexes = np.zeros((a.shape[0], unique.size), dtype=np.bool)
最后,使用逆映射填充数组:
>>> indexes[np.arange(a.size), inverse] = True
indexes
地图在最后一个维度中包含True
,与其匹配的唯一编号的索引相对应(unique
数组中的顺序)
>>> indexes[:3, :]
array([[False, False, False, False, True],
[ True, False, False, False, False],
[False, False, False, True, False]], dtype=bool)
每行对应原始数组a
的索引,每列对应唯一编号。
答案 1 :(得分:1)
你的问题有点含糊不清;但看看numpy_indexed;似乎可以使用npi.indices,npi.contains或npi.in_来解决您的问题。