使用 numpy 创建 NxN 矩阵的更好方法,具有特定的对角线和非对角线元素

A better way to create an NxN matrix, with specific diagonal and off diagonal elements with numpy

我需要制作一个 NxN 矩阵并指定对角线元素。到目前为止,这是我尝试过的,我希望找到一个没有循环的更优雅的解决方案。

N = 4
value_offdiag  = 2    

b = np.eye(N, N)
b[np.triu_indices(N, 1)] = value_offdiag
b[np.tril_indices(4, -1)] = value_offdiag

这可行,但必须有更好的方法而不使用循环。只是想检查一下(google 搜索到目前为止还没有透露太多)

使用 numpy.fill_diagonal 怎么样?

N = 4
value_offdiag = 2
b = np.ones((N,N))*value_offdiag
np.fill_diagonal(b,1)

print(b)

输出:

[[1. 2. 2. 2.]
 [2. 1. 2. 2.]
 [2. 2. 1. 2.]
 [2. 2. 2. 1.]]

One-liner:

N = 4
value1 = 100
value2 = 234

a = np.eye(N)*value1 + abs(np.eye(N)-1)*value2

输出:

>>> a.astype(int)
array([[ 13, 240, 240, 240],
       [240,  13, 240, 240],
       [240, 240,  13, 240],
       [240, 240, 240,  13]])

您可以像下面这样使用 numpy.fill + numpy.fill_diagonal

>>> a = np.full((4, 4), 2.0)
>>> np.fill_diagonal(a, 1)
>>> a
array([[1., 2., 2., 2.],
       [2., 1., 2., 2.],
       [2., 2., 1., 2.],
       [2., 2., 2., 1.]])