当前位置: 首页 > 面试题库 >

快速numpy滚动_产品

白弘伟
2023-03-14
问题内容

我需要rolling_product函数expanding_product函数。

有各种pandas rolling_XXXXexpanding_XXXX功能,但我很惊讶地发现缺少的expanding_product()功能。

为了使事情正常,我一直在使用这种相当慢的替代方法

pd.expanding_apply(temp_col, lambda x : x.prod())

我的数组通常包含32,000个元素,因此这被证明是一个瓶颈。我很想尝试log()cumsum()exp(),但是我认为我应该在这里提出问题,因为可能会有更好的解决方案。


问题答案:

我有一个更快的机制,尽管您需要运行一些测试以查看准确性是否足够。

这是原始的exp / sum / log版本:

def rolling_prod1(xs, n):
    return np.exp(pd.rolling_sum(np.log(xs), n))

这是一个使用累积乘积,将其移过(用nans预先填充),然后将其重新分配出去的版本。

def rolling_prod2(xs, n):
    cxs = np.cumprod(xs)
    nans = np.empty(n)
    nans[:] = np.nan
    nans[n-1] = 1.
    a = np.concatenate((nans, cxs[:len(cxs)-n]))
    return cxs / a

对于此示例,两个函数返回相同的结果:

In [9]: xs
Out[9]: array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

In [10]: rolling_prod1(xs, 3)
Out[10]: array([  nan,   nan,    6.,   24.,   60.,  120.,  210.,  336.,  504.])

In [11]: rolling_prod2(xs, 3)
Out[11]: array([  nan,   nan,    6.,   24.,   60.,  120.,  210.,  336.,  504.])

但是第二个版本要快得多:

In [12]: temp_col = np.random.rand(30000)

In [13]: %timeit rolling_prod1(temp_col, 3)
1000 loops, best of 3: 694 µs per loop

In [14]: %timeit rolling_prod2(temp_col, 3)
10000 loops, best of 3: 162 µs per loop


 类似资料:
  • 我有一些子视图的滚动视图。在这个子视图中,我有其他子视图。 我想展示一个固定在这个“嵌套”子视图之一上的popover。 我正确地显示了popover,它被锚定到正确的子视图,但是每当我滚动scrollview时,popover不会随着scrollview移动。每次我水平滚动滚动滚动视图时,我希望我的popover移动并调整其“x”原点。 这是我用来呈现弹出窗口的代码。 有什么帮助吗?谢谢!

  • Swoole的绝大部分功能只能用于cli命令行环境,请首先准备好Linux Shell环境。可使用vim、emacs、phpstorm或其他编辑器编写代码,并在命令行中通过下列指令执行程序。 php /path/to/your_file.php 成功执行Swoole服务器程序后,如果你的代码中没有任何echo语句,屏幕不会有任何输出,但实际上底层已经在监听网络端口,等待客户端发起连接。可使用相应的

  • 滚动条在滚动时大致移动。启用fastcrollenable=“true”时,如何使滚动条平稳移动? 我已经找了一个月了。在android文档、stackoverflow和其他网站上都有,但我找不到。 在我的listview中,我只是添加......

  • 问题内容: 在应用程序的核心(用Python编写并使用NumPy编写)中,我需要旋转一个四阶张量。实际上,我需要多次旋转许多张量,这是我的瓶颈。我涉及八个嵌套循环的幼稚实现(如下)似乎很慢,但是我看不到利用NumPy矩阵运算并希望加快处理速度的方法。我有一种应该使用的感觉,但是我不知道如何使用。 数学上,旋转张量T’的元素由下式给出:T’ijkl = ∑ g ia g jb g kc g ld T

  • 我有自定义列表视图。在listview中包含200个项目。当我从上到下或从下到上快速滚动时,listview显示错误的图像。如果我在慢慢滚动,那么它的工作很好。 XML格式的SimpleDraweeView: 将图像URI设置为SimpleDraweeView: SetHierarchyForDraweeView函数: AsyncColorDrawable类: 如果我做错了什么,请你想清楚。谢谢你

  • Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。 如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。 服务提供者 完整安装步骤,请参见:示例提供者安装 定义服务接口 DemoService.java 1: package