本质上,我正在寻找一段高效的代码来生成以下矩阵:
[[1 2 3 4 5]
[2 3 4 5 6]
[3 4 5 6 7]
[4 5 6 7 8]
[5 6 7 8 9]]
我想出了以下方法,它有效,但它不是特别漂亮,我想可能有一种方法可以真正利用 numpy 为此(除了创建矩阵和 pretty-print 它):
import copy
import numpy as np
identity_count = 5
priority_matrix = np.identity(identity_count, dtype=int)
rating_start = 1
maximum_rating = identity_count * 2
rating_range = range(rating_start, maximum_rating)
priority_copy = copy.copy(priority_matrix)
for row_idx, row in enumerate(priority_copy):
rating_pos = 0
for col_idx, item in enumerate(row):
priority_matrix[row_idx][col_idx] = rating_range[rating_pos]
rating_pos += 1
rating_start += 1
rating_range = range(rating_start, maximum_rating)
print(np.matrix(priority_matrix))
必须有一种更有效的方法来做到这一点(不需要使用 numpy)。
谢谢!
请您参考如下方法:
您显然在描述一种类型 Hankel matrix .
>>> from scipy.linalg import hankel
>>> hankel(c=range(1,6), r=range(5,10))
array([[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8],
[5, 6, 7, 8, 9]])
Hankel 矩阵具有常数反对角线。参数 c 和 r 分别指定第一列和最后一行。
