【发布时间】:2019-06-19 03:02:01
【问题描述】:
在我的应用程序中,A 和 jj 被指定为扁平的 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.arange或range调用生成jj,则可以将其转换为slice。但是要了解切片的相对速度,您必须了解view和copy之间的区别,并最终了解numpy如何使用strides和shape将平面数据数组视为多维一。