计算每个numpy数组列

时间:2018-03-07 09:28:42

标签: python arrays python-3.x numpy

在pandas中,人们可以简单地使用DataFrame.nunique来获取所请求轴上的不同观察数量。我一直试图用一个有4列的numpy数组做同样的事情。但是,我对(部分)失败感到沮丧。

起初我尝试np.unique(a, axis=0),但这会返回一个具有唯一值本身的数组。然后我尝试将其与np.size()结合使用,它可以正常工作,但一次只返回一列的计数。

如何获取所有列的计数并将其存储在新数组中?理想情况下,我想一次性完成此操作而不使用for-loop

答案可能很简单,但仍然没有找到我!

1 个答案:

答案 0 :(得分:1)

计算每个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中提供了此答案。