确定 numpy 数组中的重复值并将它们添加到另一列中 python
determining repeated values in numpy array and adding them in another column python
我有一个像
这样的数组
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]])
您可以使用 scipy.stats.itemfreq
:
>>> from scipy.stats import itemfreq
>>> w = (1,3,4,5,6,2,9,2,4,2,1,3,3,6)
>>> itemfreq(w)
array([[1, 2],
[2, 3],
[3, 3],
[4, 2],
[5, 1],
[6, 2],
[9, 1]])
如果你想要一个列表元组:
>>> tuple(itemfreq(w).tolist())
([1, 2], [2, 3], [3, 3], [4, 2], [5, 1], [6, 2], [9, 1])
如果我理解正确,您希望输出中的第一列是 w
中值的完整序列(包括重复),第二列是每个值的计数(也重复对于 w
)?
中的重复值
您可以使用 np.unique
通过返回项目计数和 'inverse' 索引集来执行此操作,这些索引从唯一值重建原始数组(在下面的示例中,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 = (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]])
您可以使用 scipy.stats.itemfreq
:
>>> from scipy.stats import itemfreq
>>> w = (1,3,4,5,6,2,9,2,4,2,1,3,3,6)
>>> itemfreq(w)
array([[1, 2],
[2, 3],
[3, 3],
[4, 2],
[5, 1],
[6, 2],
[9, 1]])
如果你想要一个列表元组:
>>> tuple(itemfreq(w).tolist())
([1, 2], [2, 3], [3, 3], [4, 2], [5, 1], [6, 2], [9, 1])
如果我理解正确,您希望输出中的第一列是 w
中值的完整序列(包括重复),第二列是每个值的计数(也重复对于 w
)?
您可以使用 np.unique
通过返回项目计数和 'inverse' 索引集来执行此操作,这些索引从唯一值重建原始数组(在下面的示例中,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]]