从NumPy WHERE开始计算索引

iswrvxsc  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(141)

因此,我有两个相当大的列表(两个列表中都有3636586个值),我尝试使用np.where()来查找使用这两个列表满足两个条件的值的数量。这些名单是

cat1 = [  0.01027171   0.01691939   0.01614619 ...,  10.18688393  10.21286678
  10.20675182]
cat2 = [  4.81194684e-09   5.13640614e-08   5.48405854e-09 ...,   2.95787549e-06
3.43822015e-09   2.17239404e-09]

然后我使用np.其中():

summ = np.array([])

summ = np.append(summ, np.where((cat1 > 6.) & (cat2*1000 > .83)))

print(summ)
>>>[ 3615964.  3616643.  3616732.  3617188.  3618296.  3618976.  3619040.
3619205.  3619429.  3620039.  3620142.  3620185.  3620487.  3620810.
3621045.  3621375.  3621396.  3621828.  3622030.  3622326.  3622713.
3622999.  3623137.  3623202.  3624357.  3624919.  3625077.  3626185.
3626558.  3626666.  3627142.  3627279.  3627660.  3628004.  3628558.
3629997.  3630053.  3630128.  3630801.  3631271.  3631567.  3632210.
3632269.  3632285.  3632589.  3633107.  3633816.  3634833.  3635190.
3635307.  3635608.  3635711.  3635767.  3636159.  3636227.]

因此,我知道这些是满足条件的值的索引,我可以调用len(Sum)来找到总金额,即55。然而,我的问题是,我想稍后在循环中使用它(这就是为什么在开头有np.append()胡说八道,我只是过早地把它放进去了),而查找len(Sum)只给出了所有循环的索引总数。有没有什么办法我可以从每个循环中找到索引的总量?如果我尝试查找np.where()列表的长度,得到的结果如下:

summ = np.array([])
summ = np.append(summ, len(np.where((cat1 > 6.) & (cat2*1000 > .83))))

print(summ)
>>>[ 1.]

我想让它输出55。这样,当我把它放在循环中时,它将输出满足条件的索引计数,而不是不分隔开地输出索引本身。我希望它看起来像这样:

sample_array = [.39, .29, .12, ...] #array of some length
 summ = np.array([])
for i in sample_array:
  summ = np.append(summ, len(np.where((cat1 > 6.) & (cat2*1000 > i)))) #len() currently doesn't work like how I want it to 

print(summ)
>>> [55, 23, 45, ...] #array of the count of indices for each loop that satisfy the conditions

当我这样运行它时,我得到了一个1的列表的输出,就像上面的行为一样。我试过SUM(np.where(...))但这只是输出指数,就像我刚开始打印总和时一样。

yqlxgs2m

yqlxgs2m1#

我想您无法通过使用np.来获得它,其中,如果您希望索引的长度满足您的条件,更好的方法是使用布尔条件,然后对其使用‘np.count_non零’。
例如,您可以做的是:
Np.count_non Zero((cat1>6.)&(cat2*1000>.83)),以获取满足条件的索引长度。希望这能帮上忙!

相关问题