假设我有一个numpy数组
[0, 1, 2, 3, 4, 5]
我如何创建一个2D矩阵从每3个元素,如下所示:
[ [0,1,2], [1,2,3], [2,3,4], [3,4,5] ]
有没有比使用for循环更有效的方法?谢谢。
for
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]])
但请记住,这是原始阵列的视图,而不是新阵列的视图。
6kkfgxo02#
由于OP不想使用for循环,我们可以使用库:您可以使用more-itertools库:
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)]
2条答案
按热度按时间x6h2sr281#
可以,您可以使用sliding window view:
但请记住,这是原始阵列的视图,而不是新阵列的视图。
6kkfgxo02#
由于OP不想使用for循环,我们可以使用库:
您可以使用
more-itertools
库:或列表的列表
也可以做: