是否有单个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)
我想要一个不需要显式for循环的解决方案。
最佳答案
如果您想要的是具有多个唯一编号条件的掩码,则可以使用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
的索引,每列对应于唯一编号。关于python - 每个值的索引列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37360874/