【发布时间】:2019-08-14 20:02:34
【问题描述】:
我有一个数组,raytimes,它是一小时的一小部分,例如 [0, 0.1, 0.2... 0.9, 1.0]。 我还有另一个浮动列表,这是我的速度 vr。每个数据时间对应于作为高度函数的速度列表。
我正在尝试从这个速度数据集中计算 15 分钟的速度标准偏差,并保留它以便在每个高度级别执行 std(所以我应该有一个标准偏差数组,每个标准偏差一个高度)。
raytimes 是时间 [0, 0.1, 0.2... 0.9, 1.0]。 vr 是 2500 个 float64 数字的 108 列表。 2500 个数字对应于在每个高度(在固定高度网格上)测量的速度。 我不知道如何分离数据块,以便我可以仅在第一个、第二个、第三个和第四个 15 分钟间隔上计算 std。 然后我需要计算每个特定高度级别的标准。
for i in raytimes:
if raytimes[i] < 0.25:
w1 = w1.append(vr)
if raytimes[i] > 0.25 & raytimes < 0.5:
w2 = w2.append(vr)
if raytimes[i] > 0.5 & raytimes < 0.75:
w3 = w3.append(vr)
if raytimes[i] < 1:
w4 = w4.append(vr)
sigma_w1 = std(w1)
sigma_w2 = std(w2)
etc...
问题出在我上面的代码中,我附加了整个 vr 矩阵。如何仅附加与 15 分钟块内的时间相对应的 vrs 列表? 然后我如何计算保持高度网格的标准,所以标准是沿着每个高度计算的?我最终应该得到相同的数组大小 2500。
【问题讨论】:
-
您应该使用
if...elif...elif...else而不是if...if...if...if。就像现在一样,您的最后一个条件独立于您之前的条件。您还会忽略数字恰好位于边界之一的情况,例如,您没有任何<=或>= -
你能再解释一下这两个数组吗? Raytimes 只是长度为 11 的一维数组,对吗?那么你有一个包含速度测量值的数组 vr 吗?你谈论它们对应于特定的时间和高度,但你没有告诉我们你如何知道每个 vr 元素来自哪个时间,你根本没有解释高度来自哪里。数字 108 只是出现在句子的中间,这是什么意思?
-
感谢 elif 提示 - 会的。是的,raytimes 是一个长度为 108 的一维列表。Vr 是一个 108 维的浮点列表,每个长度为 2500。高度是一个长度为 2500 的列表,它的值永远不会改变。因此,在每个高度,每次都有一个 vr。我希望澄清一下?
-
好的,那么您已经在 2500 个不同的高度测量了 108 个不同时间的速度?如果它以 0.1 的步长从 0 变为 1,那么你的光线时间如何有 108 次?我稍后会给你写一个答案,但只是为了我的信息,数据是如何以这种格式获得的?这种类型的科学计算通常使用 numpy 数组或 pandas 数据帧而不是列表,因为它们更容易解决像您这样的问题。
-
我同意这是一种粗暴的方式来编写代码 - 必须有一个更优雅的解决方案,我可以根据时间对 VR 进行分组,然后计算每个高度的 STD....