我有一个名为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,).
我已经用谷歌搜索了这个错误的含义,但答案通常是针对用户的问题的,我不够精明,无法诊断我的问题。
编辑:
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:因此 catalog['zgal'] 和 catalog['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