矩阵类似
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
为了澄清,这不仅仅是创建一个这样的矩阵,而是创建许多其他类似的不同矩阵。
[0, 1, 2, 3]
[1, 2, 3, 4]
[2, 3, 4, 5]
您可以使用sliding_window_view
from numpy.lib.stride_tricks import sliding_window_view as swv
cols = 4
rows = 3
out = swv(np.arange(cols+rows-1), cols).copy()
注意。因为这是一个视图,所以需要.copy()
使其成为一个可变数组,如果只读对象足够(例如,用于显示或索引(,则没有必要这样做
输出:
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5]])
cols = 3 ; rows = 5
:输出
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
备选方案:广播:
cols = 4
rows = 3
out = np.arange(rows)[:,None] + np.arange(cols)
输出:
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5]])
L = 3
np.array([
np.array(range(L)) + j
for j in range(L)
])
或者进行一点优化:
L = 3
a = np.array(range(L))
np.array([
a + j
for j in range(L)
])
您可以使用广播轻松创建这样的矩阵,例如
>>> np.arange(3)[:, None] + np.arange(4)
array([[0, 1, 2, 3],
[1, 2, 3, 4],
[2, 3, 4, 5]])