【问题标题】:pseudo increasing the 'resolution' of a value table伪增加值表的“分辨率”
【发布时间】:2015-09-23 16:17:57
【问题描述】:

我有一个包含 16.000 个条目的测量数组,格式为

[t] [value]

问题是我的数据记录器太慢了,我每秒只有测量点。对于我的模拟,我需要增加伪分辨率。因此,每个时间步除以 1000,每个测量值都必须复制 1000 次。 (为清楚起见,请参见图)。所以我伪增加了我的测量文件的分辨率。

如何在Python 中使用numpy 有效地做到这一点(!!!)。我不想在创建一个包含 16.000.000 个条目的数组时进行迭代。

仅将我的时间数组除以 1000 的简单答案在这种情况下不适用。

编辑:让它变得更加复杂:除了我的图片之外,每个时间步长的时间增量并不是等距的。

【问题讨论】:

  • 不能只使用插值函数吗?
  • 另外,您要完成的两个示例中的哪一个?从你的问题中很不清楚。请给出一个示例和所需的输出。
  • 也许对于这样的大数据量,您应该考虑将代码的某些部分迁移到较低级别的语言,例如 C...?
  • @yolenoyer numpy 会比 C 快,因为它是直接的 FORTRAN 绑定。另外,16mm 也不算大。

标签: python arrays numpy indexing


【解决方案1】:

虽然很难准确说出您要问什么,但我猜您只是想在已有的值之间进行插值。好东西numpy 有一个简单的内置模块,interp1d 模块 (docs):

>>> from scipy import interpolate
>>> x = np.arange(0, 10)
>>> y = np.exp(-x / 3.0)
>>> f = interpolate.interp1d(x, y)

>>> x_new = np.array([1.5, 2.5, 3.5])
>>> f(x_new)
array([ 0.61497421,  0.44064828,  0.31573829])

就您问题的第二部分而言,numpy 再次为您提供了一个很棒的内置功能! np.repeat 函数应该完全符合您的要求,一直到可变的时间步长。可以在here 找到文档。下面的例子:

>>> values = np.array([1, 2, 3, 4])
>>> np.repeat(values, [2, 1, 2, 1])
array([1, 1, 2, 3, 3, 4])

【讨论】:

  • 这有帮助,谢谢。我想在时间步长之间进行插值。但我的[value] 是不变的。所以我仍然需要第二张桌子的复制功能。
  • @user69453 啊,我明白了。也包括第二个问题的答案。
  • @user69453 有帮助吗?
  • No 详细看答案后,我可以说这不是我想要的。有时间我会举更多例子。
  • @user69453 让我知道您何时这样做,因为这可以解决您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2021-11-10
  • 2013-11-29
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多