生成对角线numpy数组上方的值

时间:2015-06-16 16:11:36

标签: python arrays numpy matrix indexing

假设您从图像中提取了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)

图形类定义和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)

以这种方式,当向我们新形成的图形添加顶点时,形成的唯一新顶点将是位于主对角线上方的位置。

1 个答案:

答案 0 :(得分:1)

我认为你想要的是这样的:

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)