【问题标题】:Np.where functionNp.where 函数
【发布时间】:2015-04-21 09:25:47
【问题描述】:

我在理解 numpy 中的 where 函数时遇到了一点问题。 “times”数组包含 GPS 测量存在的离散时期(四舍五入到最接近的秒数)。 “locations”数组包含卫星的纬度、经度和高度的离散值,在“times”时期以 10 秒间隔到 1 秒间隔进行插值。 “tracking”数组包含一个以“times”为单位的每个时期的数组(数组中的数组)。数组有 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)

这应该给我们所有损失的位置。有了这个索引,就很容易找到正确的位置。但它不断返回无用的数据。

有人可以帮助我们吗?

【问题讨论】:

  • 你能用一个小数组 tracking 做一个简单的例子吗?你从这个例子中得到了什么,你想从这个例子中得到什么?
  • 为了扩展上面的评论,不要用文字描述你的数据,而是用代码编写一个小的有代表性的示例示例。例如times = np.array([1.0, 2.5, 3.0, 4.7])
  • [:][:] 的用途是什么? tracking[:][:][4] 是有意义的数据吗?

标签: numpy gps location where


【解决方案1】:

我认为问题在于您的双切片。此外,拥有一个数组数组可能会导致奇怪的问题(我假设您的意思是二维数组的对象数组)。

所以我认为您需要将 dstack tracking 放入 3D 数组中,然后在上面执行 where。如果阵列已经是 3D,那么您可以跳过 dstack 部分。这将获得L2 is unexpectedly lost 所在的位置,这就是您在示例中所做的:

tracking3d = np.dstack(tracking)
A0, A2 = np.where(tracking3d[:, 4, :]==1)

A01 沿轴0(卫星)的位置,而A2 是同一1 沿轴2(时间纪元)的位置。

如果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)。

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多