首页 >后端开发 >Python教程 >如何通过跨步从 NumPy 数组高效创建子数组?

如何通过跨步从 NumPy 数组高效创建子数组?

Susan Sarandon
Susan Sarandon原创
2024-12-02 18:18:111000浏览

How to Efficiently Create Subarrays from a NumPy Array with a Stride?

使用 Stride/Stepsize 从 Numpy 数组中获取子数组

在这种情况下,我们讨论了一种在 Python NumPy 中从 NumPy 创建子数组的有效方法给定具有特定步长的数组。

为了实现这一点,我们探索了两个方法:

1.广播方法:

def broadcasting_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    return a[S * np.arange(nrows)[:, None] + np.arange(L)]

在此方法中,广播用于创建步幅矩阵。

2.高效 NumPy 步幅方法:

def strided_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows, L), strides=(S * n, n))

此方法利用 NumPy 的高效步幅来创建子数组矩阵。

示例:

考虑一个数组a:

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

要创建长度为 5、步幅为 3 的子数组,我们可以使用以下任一方法:

subarrays_broadcasting = broadcasting_app(a, L=5, S=3)
subarrays_strides = strided_app(a, L=5, S=3)

两种方法都会产生以下结果:

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]

以上是如何通过跨步从 NumPy 数组高效创建子数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn