gpt4 book ai didi

python - 计算每行在 numpy.array 中出现的次数

转载 作者:太空狗 更新时间:2023-10-29 18:18:41 24 4
gpt4 key购买 nike

我正在尝试计算每行显示在 np.array 中的数字,例如:

import numpy as np
my_array = np.array([[1, 2, 0, 1, 1, 1],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[9, 7, 5, 3, 2, 1],
[1, 1, 1, 0, 0, 0],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[1, 1, 1, 1, 1, 0]])

[1, 2, 0, 1, 1, 1] 出现了 3 次。

一个简单朴素的解决方案是将我所有的行转换为元组,并应用 collections.Counter,如下所示:

from collections import Counter
def row_counter(my_array):
list_of_tups = [tuple(ele) for ele in my_array]
return Counter(list_of_tups)

产生:

In [2]: row_counter(my_array)
Out[2]: Counter({(1, 2, 0, 1, 1, 1): 3, (1, 1, 1, 1, 1, 0): 1, (9, 7, 5, 3, 2, 1): 1, (1, 1, 1, 0, 0, 0): 1})

但是,我担心我的方法的效率。也许有一个库提供了执行此操作的内置方法。我将问题标记为 pandas 因为我认为 pandas 可能有我正在寻找的工具。

最佳答案

您可以使用 the answer to this other question of yours获取唯一项的计数。

在 numpy 1.9 中有一个 return_counts 可选关键字参数,所以你可以简单地做:

>>> my_array
array([[1, 2, 0, 1, 1, 1],
[1, 2, 0, 1, 1, 1],
[9, 7, 5, 3, 2, 1],
[1, 1, 1, 0, 0, 0],
[1, 2, 0, 1, 1, 1],
[1, 1, 1, 1, 1, 0]])
>>> dt = np.dtype((np.void, my_array.dtype.itemsize * my_array.shape[1]))
>>> b = np.ascontiguousarray(my_array).view(dt)
>>> unq, cnt = np.unique(b, return_counts=True)
>>> unq = unq.view(my_array.dtype).reshape(-1, my_array.shape[1])
>>> unq
array([[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0],
[1, 2, 0, 1, 1, 1],
[9, 7, 5, 3, 2, 1]])
>>> cnt
array([1, 1, 3, 1])

在早期版本中,您可以这样做:

>>> unq, _ = np.unique(b, return_inverse=True)
>>> cnt = np.bincount(_)
>>> unq = unq.view(my_array.dtype).reshape(-1, my_array.shape[1])
>>> unq
array([[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0],
[1, 2, 0, 1, 1, 1],
[9, 7, 5, 3, 2, 1]])
>>> cnt
array([1, 1, 3, 1])

关于python - 计算每行在 numpy.array 中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com