我是一位新的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英尺组成的形状的周长。
答案 0 :(得分:0)
for
确实以与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]
这次我们还对列表元素进行操作,只有列表有点不同。使用function range
,我们会创建整数列表,从0
到collection
的长度。换句话说,我们用索引创建新列表。有了这些,我们可以访问原始元素。
使用range
,你应该能够继续解决你的问题。