Arrays 计算行元素的不同副本

Arrays 计算行元素的不同副本,arrays,numpy,Arrays,Numpy,考虑数组示例A import numpy as np A = np.array([[2, 3, 6, 7, 3, 6, 7, 2], [2, 3, 6, 7, 3, 6, 7, 7], [2, 4, 3, 4, 6, 4, 9, 4], [4, 9, 0, 1, 2, 5, 3, 0], [5, 5, 2, 5, 4, 3, 7, 5], [7, 5, 4

考虑数组示例A

import numpy as np

A = np.array([[2, 3, 6, 7, 3, 6, 7, 2],
              [2, 3, 6, 7, 3, 6, 7, 7],
              [2, 4, 3, 4, 6, 4, 9, 4],
              [4, 9, 0, 1, 2, 5, 3, 0],
              [5, 5, 2, 5, 4, 3, 7, 5],
              [7, 5, 4, 8, 0, 1, 2, 6],
              [7, 5, 4, 7, 3, 8, 0, 7]])
问题:我想标识具有指定数量的不同元素副本的行。下面的代码很接近:代码需要能够回答诸如“A的哪些行正好有4个元素出现两次?”或“A的哪些行正好有1个元素出现三次”之类的问题。

这将生成两个输出行,两个都有4个复制的元素。
第一行有2,3,6,7的副本。第二行有3,6,7,7的副本:

array([[2, 3, 6, 7, 3, 6, 7, 2],
       [2, 3, 6, 7, 3, 6, 7, 7]])
我的问题是我不想要第二个输出行,因为它只有3个不同的副本(即:3,6,7)
如何修改代码以仅识别不同的副本?

如果我理解正确,您希望A的行具有4个不同的值,并且每个值必须至少具有一个副本。您可以利用
np.unique(return\u counts=True)
,它返回两个值,不同的值和每个值的计数

counts = [np.unique(row,return_counts=True) for row in A ]
valid_indices = [ np.all(row[1] > 1) and row[0].shape[0] == 4 for row in counts ]
valid_rows = A[valid_indices]

谢谢你的帮助。在查找复制的4个不同值时,代码生成了正确的输出,但这是一个不幸的结果,因为A的行有8个元素。我应该说得更清楚些。您的方法看起来不错,但是如何修改有效的_索引行来实现这一点:有效的_索引=[“行[1]正好包含4个值2”]。这样,我也可以使用您的解决方案来回答以下问题:有效的_索引=[“'row[1]正好包含3个值2”],或者甚至有效的_索引=[“'row[1]正好包含1个值3”]。谢谢。这基本上是许多Valdez的解决方案,但通过更改有效行,它得到了一些推广:#对于4对唯一值,valid=[np.any(np.count)(对于count中的行,np.any(np.count)(对于count中的行,row[1]==2==4)#对于count中的行,valid=[np.any(np.count(nonzero(row[1]=3)==1)]
counts = [np.unique(row,return_counts=True) for row in A ]
valid_indices = [ np.all(row[1] > 1) and row[0].shape[0] == 4 for row in counts ]
valid_rows = A[valid_indices]