使用for循环比较数组的每个元素的邻居

时间:2014-10-21 21:10:15

标签: python arrays for-loop numpy indexing


我是一位新的Python用户,我发现Python + Numpy + Matplotlib的组合令人惊叹。我知道一点C并且我被要求在工作中使用Python,一切进展顺利,Numpy拥有这些令人难以置信的功能,几乎可以完成我所需要的一切。但是当我尝试使用" for-loop"时,我想我踩到了我的第一块石头。和Numpy一起我不知道自己做错了什么,但我相信我的C逻辑让我犯了一些错误。

总结:我有一个大阵列" A" (1D)由0和1组成,所有1都在一起。我有另一个阵列" B" (256x9)具有不同的条件。我想要的是通过A数组运行比较每个A元素的所有8个邻居与B的前8列中的每一列,并且当它找到正确的选择时它将第9列的值分配给第三个矩阵C(相同大小)作为A)。

问题在于我不知道如何在Python中使用索引,我在互联网上看了一眼并没有找到任何帮助我。我试图使用诸如(i + 1,j),(i-1,j),(i-1,j + 1)之类的东西来访问元素的邻居...我得到了出界错误。

我正在寻找这样的事情:

for i in A:
   for y in B:
     if A[i-1,j+1] == B[1,y]:
        if A[i,j+1] == B[2,y]:
          if A[i+1,j+1] == B[3,y]:
            if A[i-1,j] == B[4,y]:
              if A[i+1,j] == B[5,y]:
                if A[i-1,j-1] == B[6,y]:
                  if A[i,j-1] == B[7,y]:
                     if A[i+1,j-1] == B[8,y]:
                         C[i] = B[9,y],

请有人可以给我一些关于我做错的提示吗?

谢谢,

编辑:

为了更清楚,让我们说阵列A和B都具有以下格式。无论阵列A是1D还是2D,因为我可以重塑它。数组B的每一行代表一个相邻条件,第九列是应该分配给该数组C的值,如果满足该行的条件。

 A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0           B = 1 1 1 1 1 1 1 1 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0               1 1 1 1 1 1 1 0 1
     0 0 0 0 0 0 0 0 0 1 0 0 0 0 0               1 1 1 1 1 1 0 1 1
     0 0 0 0 1 1 0 0 1 1 0 0 0 0 0               .
     0 0 0 1 1 1 1 1 1 1 1 1 1 0 0               .
     0 0 1 1 1 1 1 1 1 1 1 1 1 0 0               .
     0 0 1 1 1 1 1 1 1 1 1 1 1 0 0               1 1 0 0 0 0 0 0 1
     0 0 1 1 1 1 1 1 1 1 1 1 1 0 0               1 0 0 0 0 0 0 0 1
     0 0 1 1 1 1 1 1 1 1 1 1 1 0 0               0 0 0 0 0 0 0 0 0 
     0 0 0 0 1 1 1 1 1 1 1 1 1 0 0
     0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
     0 0 1 1 1 1 1 1 1 1 1 1 1 0 0
     0 0 0 0 0 0 0 1 1 1 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

具体来说,我试图找到由1英尺组成的形状的周长。

1 个答案:

答案 0 :(得分:0)

Python中的

for确实以与C语言不同的方式工作。运行(即使在shell中)一些简单的例子可以帮助你一点

collection = ["cat", "dog", "horse"]

for animal in colection:
    print animal

您可以看到for分配给列表中的变量animal元素,其索引。因此,在您的示例中,变量i被指定为01,具体取决于列表中给定元素的值。

但有时你仍然希望对索引进行操作(如你的情况),所以让我们改变一下我们的例子

collection = ["cat", "dog", "horse"]

for i in range(len(colection)):
    print "index: " + i
    print animal[i]

这次我们还对列表元素进行操作,只有列表有点不同。使用function range,我们会创建整数列表,从0collection的长度。换句话说,我们用索引创建新列表。有了这些,我们可以访问原始元素。

使用range,你应该能够继续解决你的问题。