Numpy Np.where函数

Numpy Np.where函数,numpy,gps,location,where,Numpy,Gps,Location,Where,我在理解numpy中的where函数时遇到了一个小问题。 “时间””数组包含GPS测量存在的离散时间(四舍五入到最接近的秒)。 “位置””数组包含卫星的纬度、经度和高度的离散值,这些离散值在“时间”时段从10秒间隔插值到1秒间隔。 “跟踪””数组包含“时间”中每个历元的数组(数组中的数组)。数组有5列和32行。这32行对应于GPS星座的32颗卫星。第0行对应第一颗卫星,第31行对应第32颗卫星。列包含以下内容(按顺序):卫星是否被跟踪(0)、L1是否锁定(1)、L2是否锁定(2)、L1是否意外丢

我在理解numpy中的where函数时遇到了一个小问题。 “时间””数组包含GPS测量存在的离散时间(四舍五入到最接近的秒)。 “位置””数组包含卫星的纬度、经度和高度的离散值,这些离散值在“时间”时段从10秒间隔插值到1秒间隔。 “跟踪””数组包含“时间”中每个历元的数组(数组中的数组)。数组有5列和32行。这32行对应于GPS星座的32颗卫星。第0行对应第一颗卫星,第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)
这应该给我们所有的损失头寸。有了这个索引,很容易找到正确的位置。但它不断返回无用的数据


有人能帮我们吗?

我想问题出在你的双片上。此外,拥有一个数组可能会导致奇怪的问题(我假设你指的是一个2D数组的对象数组)

所以我认为您需要
dstack
跟踪
到一个3D数组中,然后在该数组上执行
where
。如果阵列已经是3D的,则可以跳过
dstack
部分。这将得到
L2意外丢失的位置,这就是您在示例中所做的:

tracking3d = np.dstack(tracking)
A0, A2 = np.where(tracking3d[:, 4, :]==1)
A0
1
沿轴
0
(卫星)的位置,而
A2
是同一
1
沿轴
2
(时间历元)的位置

如果
tracking
的值只能是
0
1
,则只需执行
np.where(tracking3d[:,4,:])
,即可简化此操作

您还可以将轴回滚到您使用的配置中(0:时间历元,1:卫星,2:跟踪状态)

如果要查找L1或L2意外丢失的位置,可以执行以下操作:

tracking3d = np.rollaxis(np.dstack(tracking), 2, 0)
A0, A1, _ = np.where(tracking3d[:, :, 3:]==1)

在这种情况下,它是相同的,除了有一个虚拟变量用于沿最后一个轴的位置,因为你不关心它是否丢失了L1或L2(如果你关心,你可以只做
np.where
独立于每个轴)。

你能用一个小数组
跟踪
来做一个简单的例子吗。你从这个例子中得到了什么?你想从这个例子中得到什么?要扩展上面的评论,不要用文字描述你的数据,请编写一个具有代表性的小样本和代码。e、 g.
times=np.array([1.0,2.5,3.0,4.7])
这个
[:][:]
的目的是什么?
跟踪[:][:][4]
数据是否有意义?
tracking3d = np.rollaxis(np.dstack(tracking), 2, 0)
A0, A1, _ = np.where(tracking3d[:, :, 3:]==1)