Np.where功能

时间:2015-04-21 09:25:47

标签: numpy gps location where

我在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)

这应该给我们所有的损失立场。有了这个指数,很容易获得正确的位置。但它不断返回无用的数据。

有人可以帮助我们吗?

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)

A01沿轴0(卫星)的位置,而A21沿轴2的位置1}}(时间纪元)。

如果tracking的值只能是01,您只需执行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。)