对于具有np.where和多个条件的循环

时间:2016-08-01 20:53:05

标签: python numpy numpy-broadcasting

我有一个名为flux_limit的值数组:

flux_limit = np.array([0.08333333,0.11785113,0.14433757...]) 

其中包含99个值。我试图使用这些值作为条件使用np.where()搜索我已读入python的目录。我想基本上从目录中获得满足这两个条件的每个通量限制的值的数量:

index=[[]]
for i in flux_limit:
     index = np.where((catalog['snu_arr'][6]*1000 > i) & (catalog['zgal'] > 6.))

我希望因为这给出了满足这两个条件的值的索引,所以我最终得到一个列表列表,每个内部列表对应一个flux_limit值。我理解如何只使用一个值来执行此操作,我只是在将其抛入for循环时遇到错误:

ValueError: operands could not be broadcast together with shapes (3636586,) (2,).

我已经用Google搜索了这个错误的含义,但答案通常是针对用户的问题而定的,而且我不够精明来诊断我的问题。

编辑:

catalog['snu_arr'][6] = [  4.81194684e-09   5.13640614e-08   5.48405854e-09 ...,   2.95787549e-06  3.43822015e-09   2.17239404e-09] 
catalog['zgal'] = [  0.01027171   0.01691939   0.01614619 ...,  10.18688393  10.21286678 10.20675182]

此目录是巨大的,3636586值,这是错误消息中的第一个数字来自的位置。

编辑2: 所以目录[' zgal']和目录[' snu_arr'] [6]的长度相同。

print(catalog['zgal'].shape, catalog['snu_arr'][6].shape)
>>>((3636586L,), (3636586L,))

以下是我在flux_limit中只对一个值所做的事情:

index = np.where((catalog['snu_arr'][6]*1000 > .083) & (catalog['zgal'] > 6.))
print(index)

将此作为输出

(array([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], dtype=int64),)

根据我的理解,这些是满足上述两个条件的值的指数。由于某种原因,它将输出作为列表列表,因此我使用len()找到值的数量。

print(len(index[0]))
>> 55

0 个答案:

没有答案