python - 在 numpy 数组中围绕定义的对角线设置递增值

标签 python arrays numpy nested-lists diagonal

对于不同的 n 值,在 python 中创建 2D 列表(或 numpy 数组)的最佳方法是什么,其中对角线设置为 -1,其余值从 0 增加 1。例如,如果 n = 3,则数组将如下所示:

[[-1,0,1]
 [2,-1,3]
 [4,5,-1]] 

或者 n = 4:

[[-1,0,1,2]
 [3,-1,4,5]
 [6,7,-1,8]
 [9,10,11,-1]]

等等

我知道我可以创建一个包含零且对角线设置为 -1 的数组: a = numpy.zeros((n,n)) numpy.fill_diagonal(a,-1)

如果 n = 3 这将给出:

[[-1,0,0]
 [0,-1,0]
 [0,0,-1]]

但是我如何将 0 设置为递增的数字,如上面的示例所示?我需要通过循环迭代并设置值吗?或者有更好的方法来解决这个问题吗?

提前致谢。

最佳答案

一种方法 -

def set_matrix(n):
    out = np.full((n,n),-1)
    off_diag_mask = ~np.eye(n,dtype=bool)
    out[off_diag_mask] = np.arange(n*n-n)
    return out

示例运行 -

In [23]: set_matrix(3)
Out[23]: 
array([[-1,  0,  1],
       [ 2, -1,  3],
       [ 4,  5, -1]])

In [24]: set_matrix(4)
Out[24]: 
array([[-1,  0,  1,  2],
       [ 3, -1,  4,  5],
       [ 6,  7, -1,  8],
       [ 9, 10, 11, -1]])

关于python - 在 numpy 数组中围绕定义的对角线设置递增值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47238708/

相关文章:

python - pandas dataframe : groupby, 应用函数返回数组并映射回结果

python - 如何使用多个索引从 NumPy 数组中获取值

python - 边界处的插值掩码

c++ - 使用 boost.python 时 c++ 流有什么问题?

javascript - 使用压缩的 JavaScript 文件(不是运行时压缩)

python - 只为要排序的类实现 __lt__ 是否安全?

javascript - 将段落拆分为数组 javascript

java - 将java类字段直接转换为字节数组

c - C中数组显式初始化期间的歧义

python - 不同大小数组的 Numpy 运算