如何按列计算每个唯一元素的出现次数?

Xin*_*ang 0 python numpy numpy-ndarray

我有一个二维数组,想要按列获取所有唯一数字的出现次数。

这是一个例子:

import numpy as np

a = np.array([[2,2,3,3],
              [2,3,3,3],
              [3,3,4,4]])
Run Code Online (Sandbox Code Playgroud)

结果应该是

[[2,1,0,0],
 [1,2,2,2],
 [0,0,1,1]])
Run Code Online (Sandbox Code Playgroud)

例如,第一行是2每列中出现的数字,0 表示2不在第三和第四列中。第二行是数字的出现3,最后一行是数字的出现4。简而言之,我想获取每个排序的唯一值的每列计数。

我尝试过np.unique(a, return_counts=True, axis=0),但得到了错误的结果:

(array([[2, 2, 3, 3],
        [2, 3, 3, 3],
        [3, 3, 4, 4]]),
 array([1, 1, 1]))
Run Code Online (Sandbox Code Playgroud)

Ala*_* T. 5

您可以在数组上使用 np.unique 来获取整个矩阵中不同值的列表。然后将唯一值与广播中的原始矩阵进行比较并对匹配求和:

import numpy as np

a = np.array([[2,2,3,3],
              [2,3,3,3],
              [3,3,4,4]])

(np.unique(a)[:,None,None]==a).sum(axis=1)

[[2 1 0 0]
 [1 2 2 2]
 [0 0 1 1]]
Run Code Online (Sandbox Code Playgroud)