Python Numpy数组:获取给定元素的上对角线和下对角线

Python Numpy数组:获取给定元素的上对角线和下对角线,python,arrays,numpy,Python,Arrays,Numpy,在上面的数组中,如何访问任何给定元素的主对角线和次对角线?例如9 所谓主对角线,我的意思是-[4,9,14], 第二对角线,我的意思是-[3,6,9,12] 我不能使用numpy.diag(),因为它需要整个数组才能得到对角线。对于第一个对角线,使用x坐标和y坐标每一步都随1增加的事实: import numpy square = numpy.reshape(range(0,16),(4,4)) square array([[ 0, 1, 2, 3], [ 4, 5,

在上面的数组中,如何访问任何给定元素的主对角线和次对角线?例如9

所谓主对角线,我的意思是-[4,9,14],
第二对角线,我的意思是-[3,6,9,12]


我不能使用numpy.diag(),因为它需要整个数组才能得到对角线。

对于第一个对角线,使用x坐标和y坐标每一步都随1增加的事实:

import numpy
square = numpy.reshape(range(0,16),(4,4))
square

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
这将为您提供两个列表,您可以使用它们访问矩阵。 当然,如果你有一个非方矩阵,这些函数将需要重新塑造一点

要说明如何获得所需的输出,请执行以下操作:

def second_diagonal(x, y, length_array):
     tot = x + y
     return zip(range(tot+1), range(tot, -1, -1))
这将产生:

a = np.reshape(range(0,16),(4,4))
first = first_diagonal(1, 2, len(a))
second = second_diagonal(1,2, len(a))
primary_diagonal = [a[i[0]][i[1]] for i in first]
secondary_diagonal = [a[i[0]][i[1]] for i in second]
print(primary_diagonal)
print(secondary_diagonal)

根据您的描述,使用
np.where
np.diagonal
np.fliplr

[4, 9, 14]
[3, 6, 9, 12]

是的,你是对的。我不知道该怎么称呼我所指的名单。这就是为什么我举了一个例子@第二部分不适用于square==11。它给出了[1,4]。代码应该是:
np.对角线(np.fliplr(正方形),偏移量=-(x-y))
。谢谢。这真是太快了,让我开心了!我正在努力理解补偿是如何工作的。文档页面——而且,没有多大帮助。我应该问另一个问题吗?调试我的代码很重要。@SharvariGc检查图片:-):你想参考哪张图片?前40次点击主要是关于切片/索引/表示。没有偏移量。这是什么意思?@SharvariGc编码语言,但后端机制是一样的,谢谢你的回答,但我不能使用它,因为它创建了两个以上的函数,第一个答案比这个简单。@SharvariGc我同意,它更好:)
[4, 9, 14]
[3, 6, 9, 12]
import numpy as np
x,y=np.where(square==9)

np.diagonal(square, offset=-(x-y))
Out[382]: array([ 4,  9, 14])

x,y=np.where(np.fliplr(square)==9)
np.diagonal(np.fliplr(square), offset=-(x-y))
# base on the op's comment it should be np.diagonal(np.fliplr(square), offset=-(x-y))
Out[396]: array([ 3,  6,  9, 12])