在大熊猫中,可以简单地使用DataFrame.nunique
来获取所请求轴上不同观察值的数量。我一直在尝试对具有4列的numpy数组执行相同的操作。但是,我对(部分)失败感到沮丧。
最初,我尝试使用np.unique(a, axis=0)
,但这会返回一个具有唯一值的数组。然后,我尝试将其与np.size()
结合使用,该方法可以工作,但一次仅返回一列的计数。
如何获取所有列的计数并将其存储在新数组中?理想情况下,我想一次性执行此操作,而不使用for-loop
。
答案可能很简单,但仍然使我难以理解!
最佳答案
对每个numpy数组列中的唯一值进行计数需要沿零轴进行切片和ufunc操作。这可以使用两种方法来完成:
a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
def nunique_percol_sort(a):
b = np.sort(a,axis=0)
return (b[1:] != b[:-1]).sum(axis=0)+1
def nunique_percol_bincount(a):
n = a.max()+1
a_off = a+(np.arange(a.shape[1]))*n
M = a.shape[1]*n
return (np.bincount(a_off.ravel(), minlength=M).reshape(-1,n)!=0).sum(1)
问题发布后,该问题由用户Divakar在单独的post中提供。
关于python - 计算每个numpy数组列中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148364/