如何使用Numpy创建如下矩阵



矩阵类似

[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]])

最新更新