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

python – 使用numpy获取多维数组的所有对角线(包括次要对角线),第1张

概述我试图获得多维物体的对角线(和反对角线)元素. 形状如(2,2),(3,3,3),(4,4,4,4),(5,5,5,5,5)等.我不认为这太相关了. 我找到了使用ndarray的.diagonal方法获取对角线元素的方法,但我找不到任何可以让我得到反对角线的东西. 那么我必须手工完成吗? [编辑] 因此对于 array([[[54, 81, 31], [ 4, 83, 18], 我试图获得多维物体的对角线(和反对角线)元素.

形状如(2,2),(3,3,3),(4,4,4),(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,[ 4. 20,etc.

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

[ 6,18]

然后“垂直”的像:

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

但是这些也是垂直的:

[6,38],[11,32]

然后就是这个,不管你怎么称呼它

[54,63]

然后这些也是“更长”的对角线,就像前一个(在几何意义上更长,如果你认为矩阵是一个三维几何结构,数字放在一个立方体的顶点,并在中间)他们之间的界限)

[38,[6,52]

然后,在这个矩阵中,一个小的对角线将是从右到左或从下到上(但不是同时)的对角线,如:

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

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

如果你也知道这是不可能的,请告诉我,因为我会手工完成.

解决方法 如果你想要一个从corner1到corner2的对角线并以形式定义角落

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

其中0表示“此维度为0”,1表示“此维度为-1 /结束”

然后,这将返回从corner1到corner2获得的值,假设数组在每个维度中具有相同的大小.

import numpydef 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]corner2=[1,1]#returns arr[0,0],arr[1,1],....,arr[-1,-1,-1]print(diagonal(arr,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],-1]print(diagonal(arr2,corner12,corner22))print([arr2[i][-1] for i in range(len(arr2))])
总结

以上是内存溢出为你收集整理的python – 使用numpy获取多维数组的所有对角线(包括次要对角线)全部内容,希望文章能够帮你解决python – 使用numpy获取多维数组的所有对角线(包括次要对角线)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存