Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用for循环比较数组中每个元素的邻居_Python_Arrays_For Loop_Numpy_Indexing - Fatal编程技术网

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

Python 使用for循环比较数组中每个元素的邻居,python,arrays,for-loop,numpy,indexing,Python,Arrays,For Loop,Numpy,Indexing,我是一个新的Python用户,我发现Python+Numpy+Matplotlib的组合令人惊叹。我懂一点C语言,有人让我在工作中使用Python,一切都很顺利,Numpy有这些难以置信的函数,几乎可以完成我需要的所有事情。但我想当我尝试使用Numpy的“for循环”时,我踩到了我的第一块石头。我不知道我做错了什么,但我相信我的C逻辑让我犯了一些错误 总结:我有一个由0和1组成的大数组“A”(1D),所有1都在一起。我有另一个数组“B”(256x9),具有不同的条件。我想要的是通过A数组运行,将


我是一个新的Python用户,我发现Python+Numpy+Matplotlib的组合令人惊叹。我懂一点C语言,有人让我在工作中使用Python,一切都很顺利,Numpy有这些难以置信的函数,几乎可以完成我需要的所有事情。但我想当我尝试使用Numpy的“for循环”时,我踩到了我的第一块石头。我不知道我做错了什么,但我相信我的C逻辑让我犯了一些错误

总结:我有一个由0和1组成的大数组“A”(1D),所有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's构成的形状的周长。

因为Python内部的工作方式与C中的工作方式略有不同。运行(甚至在shell中)一些简单的示例可能会对您有所帮助

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

for animal in colection:
    print animal
正如您可以看到的那样,
for
为列表中的变量
animal
元素指定了而不是它们的索引。因此,在您的示例中,变量
i
被赋值为
0
1
,具体取决于给定元素的值

但有时您仍然希望对索引进行操作(就像您的例子一样),所以让我们对我们的示例进行一些更改

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

for i in range(len(colection)):
    print "index: " + i
    print animal[i]
这一次我们也对列表的元素进行操作,只有列表有一点不同。通过创建整数列表,从
0
集合的长度。换句话说,我们用索引创建新的列表。有了这些,我们可以访问原始元素中的元素


使用
range
您应该能够解决您的问题。

如果您发布更大部分的代码,我想我可以帮您做得更好一些。不过,一般来说,在使用numpy时不需要循环。它有很多函数可以帮助您避免for循环,因为它们很慢。实际上,大多数numpy函数都使用C来执行CPU密集型任务。(我认为它确实是2D的,因为这对于8个邻居来说更有意义。)此外,您不是在迭代索引,而是在数组中迭代元素。您可能想进一步了解一下,Python是基于0的。这意味着,在访问B时,您可能想从索引1到9中减去一个。此外,在Python中,行索引是第一个索引,因此您可能必须交换B索引。@MiTz我没有想到您定义
A
矩阵的方法,它是
1D数组
。你能举一个
A
B
数组的例子吗?从你的解释和你试图编码你想做的事情来看,这并不清楚!!