【问题标题】:Generation of values above diagonal numpy array在对角线numpy数组上方生成值
【发布时间】:2015-09-01 14:00:50
【问题描述】:

假设您有一个从图像中提取的 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)

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

【问题讨论】:

  • “我只关心一种我只能考虑对角线以上的顶点的方法”是什么意思,range(M1,M2,M3...M10) 是什么意思?
  • 不清楚您的确切问题是什么。也许尝试编辑它,这样你就可以在某处放置一个? 标记。
  • 我的意思是我只需要帮助创建这个循环来只考虑边缘,并且一旦正确考虑了上三角形,我不需要帮助如何实际生成顶点。 Range(M1...M10) 是列索引。 Range(N1..N10) 是行索引。
  • @tom10 不确定你的意思

标签: python arrays numpy matrix indexing


【解决方案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) 的内循环。

【讨论】:

  • 我看不出这将如何帮助我专门检查仅在矩阵对角线上方的列和行位置,而无需对位置 5、10、15、4、8、9、14 进行硬编码排除,12,13
  • 只是不清楚你想要什么。在您的示例中,您使用了 (x-y)>=0,这意味着包括对角线。然后在您的评论中,您谈论...、8、9、14 等的硬编码排除,我的循环不会产生这些排除。我只是要放弃。但也投票结束这个问题,因为这不是一个明确的问题,你也没有努力说清楚。
  • 我现在已经了解您提供给我的内容,我将在编辑中发布我的问题的解决方案,以便希望澄清一些问题。也将投票并作为解决方案得出结论。
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 2015-05-09
  • 2022-01-26
  • 1970-01-01
  • 2021-05-11
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多