gpt4 book ai didi

python - 矩阵中每行的特定案例计数

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:04 26 4
gpt4 key购买 nike

我对 numpy 和科学计算还很陌生,我为一个问题苦苦挣扎了好几天,所以我决定把它贴在这里。

我正在尝试获取 numpy 数组中某个条件的特定出现次数。

In [233]: import numpy as np

In [234]: a= np.random.random([5,5])

In [235]: a >.7
Out[235]: array([[False, True, True, False, False],
[ True, False, False, False, True],
[ True, False, True, True, False],
[False, False, False, False, False],
[False, False, True, False, False]], dtype=bool)

我想计算每行中 True 的出现次数,并在该计数达到特定阈值时保留这些行:

例如:

results=[]
threshold = 2

for i,row in enumerate(a>.7):
if len([value for value in row if value==True]) > threshold:
results.append(i) # keep ids for each row that have more than 'threshold' times True

这是代码的非优化版本,但我很想用 numpy 实现同样的事情(我有一个非常大的矩阵要处理)。

我一直在尝试使用 np.where 做各种事情,但我只能得到扁平化的结果。我需要行号

提前致谢!

最佳答案

为了使结果可重现,使用一些种子:

>>> np.random.seed(100)

然后对于样本矩阵

>>> a = np.random.random([5,5])

用总和计算沿轴的出现次数:

>>> (a >.7).sum(axis=1)
array([1, 0, 3, 1, 2])

您可以使用 np.where 获取行号:

>>> np.where((a > .7).sum(axis=1) >= 2)
(array([2, 4]),)

要过滤结果,只需使用 bool 索引:

>>> a[(a > .7).sum(axis=1) >= 2]
array([[ 0.89041156, 0.98092086, 0.05994199, 0.89054594, 0.5769015 ],
[ 0.54468488, 0.76911517, 0.25069523, 0.28589569, 0.85239509]])

关于python - 矩阵中每行的特定案例计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358312/

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