我在numpy中了解where函数时遇到了一些问题。 '次'数组包含存在GPS测量值的离散时期(四舍五入到最接近的秒)。 “位置”数组包含在“时间”时期从10秒间隔到1秒间隔内插的卫星的纬度,经度和高度的离散值。 “跟踪”数组包含“时间”(数组中的数组)中每个纪元的数组。这些数组有5列32行。 32行对应于GPS星座的32颗卫星。第0行对应于第1卫星,第31行至第32卫星。列包含以下内容(按顺序):是卫星跟踪(0),L1锁定(1),L2锁定(2),是L1意外丢失(3),L2意外丢失(4) 即可。
我们需要找到所有意外损失并将它们放入数组中,以便我们可以在地图上绘制。
我们尝试做的是:
i = 0
with np.load(r’folderpath\%i.npz' %i) as oneday_data: #replace folderpath with your directory
times = oneday_data['times']
locations = oneday_data['locations']
tracking = oneday_data['tracking']
A = np.where(tracking[:][:][4] ==1)
这应该给我们所有的损失立场。有了这个指数,很容易获得正确的位置。但它不断返回无用的数据。
有人可以帮助我们吗?
答案 0 :(得分:0)
我认为问题是你的双重切片。此外,拥有一个数组阵列可能会导致奇怪的问题(我假设你的意思是一个2D数组的对象数组)。
所以我认为您需要将dstack
tracking
放入3D数组中,然后对其进行where
。如果阵列已经是3D,那么您可以跳过dstack
部分。这将获得L2 is unexpectedly lost
的位置,这就是您在示例中所做的:
tracking3d = np.dstack(tracking)
A0, A2 = np.where(tracking3d[:, 4, :]==1)
A0
是1
沿轴0
(卫星)的位置,而A2
是1
沿轴2
的位置1}}(时间纪元)。
如果tracking
的值只能是0
或1
,您只需执行np.where(tracking3d[:, 4, :])
即可简化此操作。
您也可以将轴回滚到您正在使用的配置中(0:时间纪元,1:卫星,2:跟踪状态)
tracking3d = np.rollaxis(np.dstack(tracking), 2, 0)
A0, A1 = np.where(tracking3d[:, :, 4]==1)
如果要查找意外丢失L1或L2的位置,可以执行以下操作:
tracking3d = np.rollaxis(np.dstack(tracking), 2, 0)
A0, A1, _ = np.where(tracking3d[:, :, 3:]==1)
在这种情况下它是相同的,除了有一个虚拟变量_
用于沿最后一个轴的位置,因为你不关心它是否丢失了L1或L2(如果你要小心,你可以为每个轴独立np.where
。)