Python 仅获取重复列的索引

Python 仅获取重复列的索引,python,arrays,numpy,Python,Arrays,Numpy,给定以下数组: np.array([1,2,3,3,3,4,4,5]) 我只想获得重复值的索引,因此输出如下所示: np.array([3,4,6]) 这是如此基本,我觉得我错过了一些简单的numpy命令,但我似乎找不到一个简单的非循环解决方案。有人有什么想法吗 理想情况下,解决方案将是高效的(无循环)并可扩展到多个维度 一个多层面的案例可能是这样的:给定 [[3,2,1,1], [2,2,1,1]] 它应该会回来 [3] 由于索引3中存在重复的[1,1],这可能会起作用: [i for

给定以下数组:

np.array([1,2,3,3,3,4,4,5])
我只想获得重复值的索引,因此输出如下所示:

np.array([3,4,6])
这是如此基本,我觉得我错过了一些简单的numpy命令,但我似乎找不到一个简单的非循环解决方案。有人有什么想法吗

理想情况下,解决方案将是高效的(无循环)并可扩展到多个维度

一个多层面的案例可能是这样的:给定

[[3,2,1,1], [2,2,1,1]]
它应该会回来

[3]
由于索引3中存在重复的
[1,1]
,这可能会起作用:

[i for i in np.arange(len(x)) if i not in np.unique(x, return_index=True)[1]]

诚然,过滤部分肯定可以改进。

一种方法是组合np.where和np.diff(重复项是差值等于零的项):


使用
np查找唯一值。唯一
,其余为重复值(此解决方案不需要对数组进行排序。您可以轻松地将其扩展到多维。请提供多维输入/输出示例,我将对其进行更新):

输出:

[3 4 6]
[3]
更新:每个OP对多维案例的更新:

at = a.T
b = np.ascontiguousarray(at).view(np.dtype((np.void, at.dtype.itemsize * at.shape[1])))
np.delete(np.arange(b.size), np.unique(b,return_index=True)[1])
或者@Adrix在评论中提出的类似且更简单的建议:

np.delete(np.arange(a.shape[1]), np.unique(a,return_index=True, axis=1)[1])
输出:

[3 4 6]
[3]

问题:1。输入总是排序的吗?2.多维度中的重复项是什么?重复向量/张量,或单个元素重复?1)输入不总是被排序2)多维度中的重复可能是例如:[[3,2,1,1],[2,2,1,1]],它应该返回单个3(我们在索引3处有一个重复的[1,1]),并用多维caseAh更新,与我想象的不同,多维的期望输出是。添加了扩展以覆盖它。谢谢。这很漂亮,谢谢!我扩展到多维的方式略有不同,只是在np.unique中指定了轴,在arange中指定了相同的轴,并使用a.shape[axis]@Adrix是的,你是对的。在答案中添加了这一点。非常感谢。
[3]