2014-10-21 4 views
1


비교 이웃에 대한 루프

나는 새로운 파이썬 사용자 그리고 난 놀라운 파이썬 + NumPy와 +하기 matplotlib의 조합을 찾는거야. C가 조금 있습니다. 파이썬을 사용하라는 질문을 받았지만 모든 것이 잘 진행되고 있습니다. Numpy는 필요한 거의 모든 것을 할 수있는 놀라운 기능을 가지고 있습니다. 그러나 Numpy와 함께 for-loop를 사용하려고했을 때 첫 번째 돌을 밟았습니다. 나는 내가 뭘 잘못하고 있는지 모르지만, 내 C 논리가 내가 실수를 저지르고 있다고 믿는다.

요약 : 모든 1이 함께 사용되는 방식으로 0과 1로 구성된 하나의 큰 배열 "A"(1D)가 있습니다. 다른 조건의 다른 배열 "B"(256x9)가 있습니다. 내가 원하는 것은 각 A 요소의 8 개 이웃을 B의 처음 8 개 열과 비교하고 올바른 선택을 찾으면 A 배열을 실행하는 것입니다. 9 번째 열의 값을 세 번째 행렬 C에 할당합니다 (같은 크기 A로).

문제는 파이썬에서 인덱스로 작업하는 방법을 모르겠다는 것입니다. 인터넷에서 한 번 보았는데 도움이되지 않았습니다. 나는 (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의 각 행은 인접 조건을 나타내고 9 번째 열은 해당 행의 조건이 충족되는 경우 배열 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 '로 만든 모양의 둘레를 찾으려고합니다. 몇 가지 간단한 예는 당신에게 도움이 될 수 (심지어 쉘에서) 실행 C.보다 파이썬 내부

+0

코드의 더 많은 부분을 게시하려면 조금 더 잘 할 수 있다고 생각합니다. 일반적으로 numpy를 사용할 때는 루프가 필요하지 않습니다. 느린 루프를 피하기 위해 많은 기능을 가지고 있습니다. 대부분의 numpy 함수는 CPU 집약적 인 작업을 수행하기 위해 실제로 C로 떨어집니다. – Vorticity

+0

A가 1D이지만 2D 인덱싱을 사용한다고 가정합니다. (이것이 실제로 8 이웃들에게 더 의미가 있기 때문에 실제로 2D라고 가정합니다.) 또한 인덱스에서는 반복하지 않지만 배열에서는 요소를 반복합니다. 또한 파이썬은 0부터 시작합니다. 즉, B에 액세스 할 때 인덱스 1에서 9로 빼는 것이 좋습니다. 또한 행 인덱스가 먼저 파이썬에서 처리되므로 B 인덱스를 스왑해야합니다. – jgosmann

+0

@MiTz 'A' 행렬을 정의한 방식이 제게 발생하지 않습니다.'1D 배열 '입니다. 'A'와'B' 배열의 예를 게시 할 수 있습니까? 당신의 설명과 당신이하고자하는 것을 코딩하려는 시도로부터 분명하지 않습니다 !! – Dalek

답변

0

for는 조금 다른 방식으로 일을하는 당신이 for이의 변수 animal 요소에 할당 볼 수 있듯이

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

for animal in colection: 
    print 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을 사용하면 문제를 해결할 수 있습니다.