在对角线 numpy 数组上方生成值
Generation of values above diagonal numpy array
假设您有一个从图像中提取的强度值的 10x10 numpy 数组。确切的数字现在并不重要。我想采用这个矩阵,并仅使用矩阵上半部分的顶点位置为图形生成顶点。更具体地说,如果我们的矩阵维度定义为 (MxN),我们可能会这样写:
for x in range(M1,M2,M3...M10):
for y in range(N1,N2,N3...N10):
if (x-y) >=0:
graph.addVertex(x,y)
图 class 定义和 addVertex 定义对我来说并不重要,因为我已经写好了。我只关心一种方法,在这种方法中我只能考虑对角线上方的顶点。接受任何和所有建议,我上面的建议只是一个可能有用的起点。谢谢!
编辑:解决方案
抱歉,如果我的清晰度问题很严重,因为我对 Python 中的编码有些陌生,但这是我的问题的解决方案:
g=Graph()
L=4
outerindex=np.arange(L**2*L**2).reshape((L**2,L**2))
outerindex=np.triu(outerindex,k=0)
for i in range(len(outerindex)):
if outerindex.any()>0:
g.addVertex(i)
以这种方式,当向我们新形成的图形添加顶点时,形成的唯一新顶点将是位于主对角线上方位置的顶点。
我想你想要的是这样的:
import numpy as np
a = np.arange(16).reshape((4,4))
print a
for i in range(4):
for j in range(i, 4):
print a[i,j],
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
# 0 1 2 3 5 6 7 10 11 15
也就是这里的重点是让内循环的索引依赖于外循环
如果您不想包含对角线,请使用带 range(i+1,4)
的内循环。
假设您有一个从图像中提取的强度值的 10x10 numpy 数组。确切的数字现在并不重要。我想采用这个矩阵,并仅使用矩阵上半部分的顶点位置为图形生成顶点。更具体地说,如果我们的矩阵维度定义为 (MxN),我们可能会这样写:
for x in range(M1,M2,M3...M10):
for y in range(N1,N2,N3...N10):
if (x-y) >=0:
graph.addVertex(x,y)
图 class 定义和 addVertex 定义对我来说并不重要,因为我已经写好了。我只关心一种方法,在这种方法中我只能考虑对角线上方的顶点。接受任何和所有建议,我上面的建议只是一个可能有用的起点。谢谢!
编辑:解决方案
抱歉,如果我的清晰度问题很严重,因为我对 Python 中的编码有些陌生,但这是我的问题的解决方案:
g=Graph()
L=4
outerindex=np.arange(L**2*L**2).reshape((L**2,L**2))
outerindex=np.triu(outerindex,k=0)
for i in range(len(outerindex)):
if outerindex.any()>0:
g.addVertex(i)
以这种方式,当向我们新形成的图形添加顶点时,形成的唯一新顶点将是位于主对角线上方位置的顶点。
我想你想要的是这样的:
import numpy as np
a = np.arange(16).reshape((4,4))
print a
for i in range(4):
for j in range(i, 4):
print a[i,j],
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
# 0 1 2 3 5 6 7 10 11 15
也就是这里的重点是让内循环的索引依赖于外循环
如果您不想包含对角线,请使用带 range(i+1,4)
的内循环。