Python 确定numpy数组中的重复值并将其添加到另一列中

Python 确定numpy数组中的重复值并将其添加到另一列中,python,arrays,numpy,Python,Arrays,Numpy,我有一个类似的数组 w = (1,3,4,5,6,2,9,2,4,2,1,3,3,6) 这里面充满了重复的数字。我想让它看起来像: w = ([[1, 5], [2, 2], [3, 1],..) 这意味着我必须首先对数组进行排序,然后计算每个值的重复次数,然后将计数放在它们旁边。因此,生成的数组如下所示: w = ([value, count]) 例如: w = ( [1,2], [3,3], [4,2], [5,1],[6,2], [2,3],[9,1],[2,3], [4,2],[2

我有一个类似的数组

w = (1,3,4,5,6,2,9,2,4,2,1,3,3,6)
这里面充满了重复的数字。我想让它看起来像:

w = ([[1, 5], [2, 2], [3, 1],..)
这意味着我必须首先对数组进行排序,然后计算每个值的重复次数,然后将计数放在它们旁边。因此,生成的数组如下所示:

w = ([value, count])
例如:

w = ( [1,2], [3,3], [4,2], [5,1],[6,2], [2,3],[9,1],[2,3], [4,2],[2,3],[1,2], [3,3], [3,3], [6,2])
我已经尝试过使用“unique”,但它会对值进行排序,而我需要数组,因为它只是在每个值旁边使用计数。这是我的尝试:

import numpy as np

x = np.array([1,1,1,2,2,2,5,25,1,1])
unique, counts = np.unique(x, return_counts=True)

np.asarray((unique, counts)).T


array([[1, 5],
       [2, 2],
       [3, 3],
       [4, 6],
       [5, 1]])
您可以使用:

如果需要列表的元组:

>>> tuple(itemfreq(w).tolist())
([1, 2], [2, 3], [3, 3], [4, 2], [5, 1], [6, 2], [9, 1])

如果我理解正确,您希望输出中的第一列是
w
中的值的完整序列(包括重复),第二列是每个值的计数(也对
w
中的重复值重复)

您可以使用
np.unique
执行此操作,方法是返回项目计数和一组“反向”索引,这些索引从唯一值重建原始数组(在下面的示例中,
uvals[idx]
将返回
w
)。您可以使用反向索引根据
w
中相应的唯一项出现的位置索引到计数值中:

w = np.array([1, 3, 4, 5, 6, 2, 9, 2, 4, 2, 1, 3, 3, 6])
uvals, idx, counts = np.unique(w, return_counts=True, return_inverse=True)
out = np.vstack((w, counts[idx])).T

print(out)
# [[1 2]
#  [3 3]
#  [4 2]
#  [5 1]
#  [6 2]
#  [2 3]
#  [9 1]
#  [2 3]
#  [4 2]
#  [2 3]
#  [1 2]
#  [3 3]
#  [3 3]
#  [6 2]]
w = np.array([1, 3, 4, 5, 6, 2, 9, 2, 4, 2, 1, 3, 3, 6])
uvals, idx, counts = np.unique(w, return_counts=True, return_inverse=True)
out = np.vstack((w, counts[idx])).T

print(out)
# [[1 2]
#  [3 3]
#  [4 2]
#  [5 1]
#  [6 2]
#  [2 3]
#  [9 1]
#  [2 3]
#  [4 2]
#  [2 3]
#  [1 2]
#  [3 3]
#  [3 3]
#  [6 2]]