gpt4 book ai didi

python - 使用 numpy 获取每行的唯一计数〜和〜唯一值

转载 作者:行者123 更新时间:2023-12-01 03:53:44 24 4
gpt4 key购买 nike

我正在尝试获得与 np.unique 等效的内容,但带有“axis=1”选项。

a = np.array([[8, 8, 8, 5, 8],
[8, 2, 0, 8, 8],
[4, 5, 4, 2, 4],
[4, 6, 5, 2, 6]])

我希望获取每行中计数最高的值并将其保存到一维向量。基本上是“每行中最常见的值。”

本例中正确答案:[8,8,4,6]。

现在我正在做这样的事情:

y = np.zeros(len(a))

for i in xrange(len(a)):
[u,cnt] = np.unique(a[i,:],return_counts=True)
# pick the value from 'u' that is seen the most.
y[i] = u[np.argmax(cnt)]

这给出了所需的结果,但在 Python 中循环数千行时速度非常慢。我正在寻找一种完全矢量化的方法。

我找到了unique row elements发布,但它并没有完全达到我想要的效果(要么我不够聪明,无法将其变成所需的形式,要么它不能直接适用。)

预先感谢您提供的任何帮助。

最佳答案

一种选择是使用 scipy.stats.mode :

In [36]: from scipy.stats import mode

In [37]: a
Out[37]:
array([[8, 8, 8, 5, 8],
[8, 2, 0, 8, 8],
[4, 5, 4, 2, 4],
[4, 6, 5, 2, 6]])

In [38]: vals, counts = mode(a, axis=1)

In [39]: vals
Out[39]:
array([[8],
[8],
[4],
[6]])

In [40]: counts
Out[40]:
array([[4],
[3],
[3],
[2]])

但是,它是使用 numpy 用 Python 编写的,并且根据输入中值的分布,它可能不会比您的解决方案更快。您可以在https://github.com/scipy/scipy/blob/master/scipy/stats/stats.py中找到实现。 (当我写这篇文章时,它在这里:https://github.com/scipy/scipy/blob/master/scipy/stats/stats.py#L372)。

该函数的基本部分仅依赖于 numpy,因此,如果它对您来说足够好,但您不希望依赖于 scipy,您可以将该函数复制到您自己的项目中 - 只需确保遵循scipy 使用的 BSD 许可证条款。

关于python - 使用 numpy 获取每行的唯一计数〜和〜唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848468/

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