从1D数组创建2D数组- Python Numpy

eoxn13cs  于 2023-01-05  发布在  Python
关注(0)|答案(2)|浏览(213)

假设我有一个numpy数组

[0, 1, 2, 3, 4, 5]

我如何创建一个2D矩阵从每3个元素,如下所示:

[
[0,1,2],
[1,2,3],
[2,3,4],
[3,4,5]
]

有没有比使用for循环更有效的方法?
谢谢。

x6h2sr28

x6h2sr281#

可以,您可以使用sliding window view

import numpy as np

arr = np.arange(6)
view = np.lib.stride_tricks.sliding_window_view(arr, 3)
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4],
       [3, 4, 5]])

但请记住,这是原始阵列的视图,而不是新阵列的视图。

6kkfgxo0

6kkfgxo02#

由于OP不想使用for循环,我们可以使用库:
您可以使用more-itertools库:

#pip install more-itertools    # note there is a hyphen not an underscore in installation.

l=[0, 1, 2, 3, 4, 5]
import more_itertools
list(more_itertools.windowed(l,n=3, step=1))

#output
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5)]

或列表的列表

list(map(list,more_itertools.windowed(l,n=3, step=1)))
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]

也可以做:

#pip install cytoolz
from cytoolz import sliding_window
list(sliding_window(3, l))
#[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5)]

相关问题