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
数组的例子吗?从你的解释和你试图编码你想做的事情来看,这并不清楚!!