【问题标题】:Fast slicing with numpy用 numpy 快速切片
【发布时间】:2019-06-19 03:02:01
【问题描述】:

在我的应用程序中,Ajj 被指定为扁平的 1-dim numpy 数组。 jj 没有严格的规则模式。我们可以通过以下方式寻址A 的切片jj

A = np.arange(10)
jj = np.array([3,5,6])
A[jj]

这被称为“花式切片”,被告知要慢。有没有办法通过以下方式加快访问速度:

A = np.arange(10)
jj = np.array([3,5,6])
ii = slice(jj)
A[ii]

这个例子不起作用,但也许还有另一种精益方式。切片命令是fast and attractive。有没有办法将 jj numpy-array 转换为 slice(jj) 并提高效率?

我的上下文是在计算流体动力学中建立一个具有可变系数的重复大型系统矩阵。感谢您的一些提示!

【问题讨论】:

  • 一个 python slice 有 3 个值 - 开始、停止、步进。
  • 如果您可以通过np.arangerange 调用生成jj,则可以将其转换为slice。但是要了解切片的相对速度,您必须了解viewcopy 之间的区别,并最终了解numpy 如何使用stridesshape 将平面数据数组视为多维一。

标签: python numpy slice


【解决方案1】:

不幸的是,由于您没有常规模式,因​​此没有比花哨的索引更好的方法了。这是唯一的方法。

它较慢的原因是切片索引不会复制值,因为您可以创建具有所需步幅的视图。对于不规则的图案,您只能复制数据。因此它会变慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多