gpt4 book ai didi

python - 使用 numpy 获取多维数组的所有对角线(包括次要对角线)

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:15 24 4
gpt4 key购买 nike

我试图获取多维对象的对角线(和反对角线)元素。

形状像(2,2), (3,3,3), (4,4,4,4), (5,5,5,5,5) 等等。不过,我认为这不太相关。

我找到了获取对角线元素的方法,使用 ndarray.diagonal 方法,但我找不到任何可以获取反对角元素的方法。

那么我必须手动完成吗?

[编辑]所以对于

array([[[54, 81, 31],
[ 4, 83, 18],
[38, 32, 52]],

[[ 2, 45, 87],
[33, 20, 3],
[85, 31, 35]],

[[ 6, 11, 49],
[39, 76, 75],
[28, 52, 63]]])

所以我想要“水平”对角线,例如:

[54, 45, 49],
[ 4. 20, 75],
etc.

但从某种意义上说,这些也是水平的

[ 6, 45, 31],
[39, 20, 18]

然后是“垂直”的,例如:

[54, 33, 28],
[81, 20, 52],
etc.

但是这些也是垂直的:

[6, 33, 38],
[11, 20, 32]

然后是这个,不管你怎么调用它

[54, 20, 63]

然后这些也是“更长”的对角线,就像之前的那样(在几何意义上更长,如果您将矩阵视为 3d 几何结构,数字被放置在立方体的顶点上,并且它们之间的线的中间)

[38, 20, 49],
[6, 20, 52]

那么,在这个矩阵中,一条从右到左或从下到上(但不是同时)的次对角线就是这样的:

[31, 45, 6],
[31, 83, 38] # this is the first classical anti-diagonal in the first matrix

当然,我并没有把所有的对角线都放在这里,但这是我的要求。我不需要偏离任何主对角线/反对角线的对角线。

如果你也知道这不可能,请告诉我,因为那时我会手工做。

最佳答案

如果你想要一条从corner1corner2的对角线,并以如下形式定义角点

(0,0,0,...,0) , (0,0,0,....,1),...,(1,1,1,..., 1)

其中 0 表示“0 处的维度”,1 表示“-1 处的维度

然后这将返回您从 corner1corner2 获得的值,假设数组在每个维度上都具有相同的大小。

import numpy
def diagonal(arr,corner1,corner2):
arr=numpy.array(arr)
#Change values to fit array
corner1Copy=(len(arr)-1)*numpy.array(corner1)
corner2Copy=(len(arr)-1)*numpy.array(corner2)

#create return array by running from corner1 to corner2 and returning the values
return [arr[tuple((i*corner2Copy+(len(arr)-i-1)*corner1Copy)/(len(arr)-1))] for i in range(len(arr))]

这里有两个小测试用例,但我建议创建更多,以防我遗漏了什么:

arr=[[[i+j+k for i in range(5)]for j in range(5)] for k in range(5)]
corner1=[0,0,0]
corner2=[1,1,1]

#returns arr[0,0,0],arr[1,1,1],....,arr[-1,-1,-1]
print(diagonal(arr,corner1,corner2))
print([arr[i][i][i] for i in range(len(arr))])

arr2=[[i+j for i in range(5)]for j in range(5)]

corner12=[0,1]
corner22=[1,1]
#return arr[0,-1],arr[1,-1],....,arr[-1,-1]
print(diagonal(arr2,corner12,corner22))
print([arr2[i][-1] for i in range(len(arr2))])

关于python - 使用 numpy 获取多维数组的所有对角线(包括次要对角线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36223564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com