numpy 1.15.3의 nditer ()를 사용하여 모든 요소를 통한 3D numpy 배열 반복 목록

GGEv

3D Numpy 배열 목록이 있고이 구조의 각 요소를 반복하고 if statemets로 약간 변경하고 싶습니다. 아래 코드는 내가 원하는 작업을 수행합니다.

for counter1, entry in enumerate(all_frames_flow):
    for counter2, entry2 in enumerate(entry):
        for counter3, entry3 in enumerate(entry2):
            for counter4, entry4 in enumerate(entry3):
                if entry4 < -20.0:
                    all_frames_flow[counter1][counter2][counter3][counter4]=-20.0
                if entry4 > 20.0:
                    all_frames_flow[counter1][counter2][counter3][counter4]=20.0
                all_frames_flow[counter1][counter2][counter3][counter4]/=20

그러나 더 비단뱀적인 방법이 있는지 궁금합니다. 에서 numpy >=1.15.0나는 문서에서이 새로운 코드를 시도했지만 실패, 그것이 내가 원하는 결과를 다시 제공하지 않습니다, 나는보다 큰 값을 볼 수있는 abs(20)것을 왜 궁금해 :

for counteref, _ in enumerate(backup2):                    
    with np.nditer(backup2[counteref], op_flags=['readwrite'], order = 'K') as it:
            for x in it:
                #print x
                if (x < -20.0):
                    x=-20.0
                if (x > 20.0):
                    x = 20.0
                x/=20.0
hpaulj

더 나은 / 대체 반복자를 시도하기 전에 반복없이 작업을 수행해야합니다 (즉, 컴파일 된 numpy코드로 작업 수행 ).

In [347]: arr = np.random.randint(-40,40,(2,3,4))

예를 들어 다음과 같은 clip방법이 있습니다.

In [348]: arr.clip(-20, 20)
Out[348]: 
array([[[-20, -20,  20,  -6],
        [-15, -17,  -8, -20],
        [  2, -20, -16,  20]],

       [[-20,   3, -20,  17],
        [ 20,  20,  20, -17],
        [ 11, -20,  20,   0]]])

모든 것을 20으로 나누는 것은 간단합니다 numpy.

In [349]: _/20
Out[349]: 
array([[[-1.  , -1.  ,  1.  , -0.3 ],
        [-0.75, -0.85, -0.4 , -1.  ],
        [ 0.1 , -1.  , -0.8 ,  1.  ]],

       [[-1.  ,  0.15, -1.  ,  0.85],
        [ 1.  ,  1.  ,  1.  , -0.85],
        [ 0.55, -1.  ,  1.  ,  0.  ]]])

더 나은 방법은 부울 마스킹으로 이런 종류의 작업을 수행하는 것입니다.

In [351]: arr
Out[351]: 
array([[[-32, -30,  39,  -6],
        [-15, -17,  -8, -34],
        [  2, -31, -16,  35]],

       [[-39,   3, -37,  17],
        [ 31,  30,  28, -17],
        [ 11, -24,  26,   0]]])

In [354]: mask1 = arr<-20
In [355]: mask2 = arr>20
In [356]: mask1
Out[356]: 
array([[[ True,  True, False, False],
        [False, False, False,  True],
        [False,  True, False, False]],

       [[ True, False,  True, False],
        [False, False, False, False],
        [False,  True, False, False]]])
In [357]: mask2
Out[357]: 
array([[[False, False,  True, False],
        [False, False, False, False],
        [False, False, False,  True]],

       [[False, False, False, False],
        [ True,  True,  True, False],
        [False, False,  True, False]]])
In [358]: arr[mask1]=-20
In [359]: arr[mask2]=20
In [360]: arr
Out[360]: 
array([[[-20, -20,  20,  -6],
        [-15, -17,  -8, -20],
        [  2, -20, -16,  20]],

       [[-20,   3, -20,  17],
        [ 20,  20,  20, -17],
        [ 11, -20,  20,   0]]])

반복에 관해서는 모든 Python 반복에서 사용할 수 없음을 기억하는 것이 중요합니다.

x의 경우 ... : x = -20.0

소스를 수정합니다. x=...할당은 x변수에 새 값을 할당 하고 반복과의 연결을 끊습니다. 이유를 모르겠다면 간단한 목록으로 시도해보십시오. 그 자리에서 변수를 변경해야합니다. 경우 x수 없습니다 간단한 정수입니다.

첫 번째 반복에서는 인덱싱하고 변경 all_frames_flow하므로 작동합니다.

all_frames_flow [counter1] [counter2, counter3, counter4] =-20.0

nditer 변경 가능한 반복 변수를 제공하므로 다음을 수행 할 수 있습니다.

In [364]: with np.nditer(arr, op_flags=['readwrite'], order = 'K') as it:
     ...:    for x in it:
     ...:        #print x
     ...:        if (x < -20.0):
     ...:            x[...]=-20.0      # change x in-place
     ...:        if (x > 20.0):
     ...:            x[...] = 20.0
     ...:            

nditer값을 변경하는 모든 예는이 [...]=표기법을 사용해야합니다 .

nditer적어도 Python 코드 는 사용하지 않는 것이 좋습니다 . Python 코드에서는 자체 컴파일 된 코드 (사용 cython) 에서 구현 될 아이디어를 테스트하는 방법으로 가장 유용합니다 . 속도 이점은 제공하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

벡터화를 사용하여 3D 배열을 조작하기 위해 3 개의 개별 1D numpy 배열을 사용할 수 있습니까?

분류에서Dev

인덱스를 사용하여 두 개의 2D numpy 배열을 반복

분류에서Dev

numpy를 사용하여 3D 배열에 세피아 효과 적용

분류에서Dev

Numpy 특이한 점 : 두 1D 배열의 모든 쌍에 함수를 적용하여 하나의 2D 배열을 얻습니다.

분류에서Dev

1D numpy 배열을 3D로 확장 및 복사

분류에서Dev

Numpy Silces를 사용하여 3D 배열 알고리즘 최적화

분류에서Dev

Astropy를 사용하여 3D Numpy 배열을 FITS 파일에 쓰기

분류에서Dev

3D 배열의 인덱스를 기반으로 4D 배열에서 조건부로 선택된 numpy 배열 항목을 평균하는 방법

분류에서Dev

범위를 사용하여 numpy 배열에서 목록 요소의 인덱스를 찾는 방법

분류에서Dev

반복 가능한 객체의 목록 / 배열에서 1d numpy 배열 생성 강제

분류에서Dev

슬라이싱을 통해 더 작은 3D 배열을 만들기 위해 3D numpy 배열의 1 차원을 반복합니다.

분류에서Dev

numpy를 사용하여 2D 배열의 값을 사용하여 3D 배열의 부분 배열 변경

분류에서Dev

numpy를 사용하여 3D 배열 목록에서 가장 가까운 값을 찾는 방법은 무엇입니까?

분류에서Dev

1-d의 여러 numpy 배열의 요소에서 모드를 취하는 방법

분류에서Dev

3D numpy 배열의 열 복제

분류에서Dev

반복을 통해 배열의 모든 요소를 제거하는 방법

분류에서Dev

3D numpy 배열을 반복하는 방법

분류에서Dev

numpy 3d array-flatten-> 1d array-> 1d에서 하나의 요소 선택-> 3d에서 요소의 인덱스를 아는 방법?

분류에서Dev

nditer를 사용한 얕은 반복

분류에서Dev

Numpy를 사용하여 벡터를 기반으로 3D 행렬에서 열 선택

분류에서Dev

반복하지 않고 2d numpy 배열에서 임의의 요소를 어떻게 설정합니까?

분류에서Dev

목록을 사용하여 배열의 numpy 배열에서 요소 추출

분류에서Dev

3D 배열에서 첫 번째 배열의 첫 번째 배열에 요소를 추가하면 Numpy 배열의 크기가 변경됩니다.

분류에서Dev

여러 배열의 모든 요소를 반복합니다.

분류에서Dev

람다를 사용하여 numpy 배열 반복

분류에서Dev

Numpy를 사용하여 주어진 3D 배열을 3x3 행렬의 배열로 바꾸는 방법

분류에서Dev

Numpy 배열의 요소를 목록으로 변환

분류에서Dev

3d Numpy 배열의 여러 값을 인덱스 목록으로 대체

분류에서Dev

numpy를 사용한 2D-3D 배열 곱셈

Related 관련 기사

  1. 1

    벡터화를 사용하여 3D 배열을 조작하기 위해 3 개의 개별 1D numpy 배열을 사용할 수 있습니까?

  2. 2

    인덱스를 사용하여 두 개의 2D numpy 배열을 반복

  3. 3

    numpy를 사용하여 3D 배열에 세피아 효과 적용

  4. 4

    Numpy 특이한 점 : 두 1D 배열의 모든 쌍에 함수를 적용하여 하나의 2D 배열을 얻습니다.

  5. 5

    1D numpy 배열을 3D로 확장 및 복사

  6. 6

    Numpy Silces를 사용하여 3D 배열 알고리즘 최적화

  7. 7

    Astropy를 사용하여 3D Numpy 배열을 FITS 파일에 쓰기

  8. 8

    3D 배열의 인덱스를 기반으로 4D 배열에서 조건부로 선택된 numpy 배열 항목을 평균하는 방법

  9. 9

    범위를 사용하여 numpy 배열에서 목록 요소의 인덱스를 찾는 방법

  10. 10

    반복 가능한 객체의 목록 / 배열에서 1d numpy 배열 생성 강제

  11. 11

    슬라이싱을 통해 더 작은 3D 배열을 만들기 위해 3D numpy 배열의 1 차원을 반복합니다.

  12. 12

    numpy를 사용하여 2D 배열의 값을 사용하여 3D 배열의 부분 배열 변경

  13. 13

    numpy를 사용하여 3D 배열 목록에서 가장 가까운 값을 찾는 방법은 무엇입니까?

  14. 14

    1-d의 여러 numpy 배열의 요소에서 모드를 취하는 방법

  15. 15

    3D numpy 배열의 열 복제

  16. 16

    반복을 통해 배열의 모든 요소를 제거하는 방법

  17. 17

    3D numpy 배열을 반복하는 방법

  18. 18

    numpy 3d array-flatten-> 1d array-> 1d에서 하나의 요소 선택-> 3d에서 요소의 인덱스를 아는 방법?

  19. 19

    nditer를 사용한 얕은 반복

  20. 20

    Numpy를 사용하여 벡터를 기반으로 3D 행렬에서 열 선택

  21. 21

    반복하지 않고 2d numpy 배열에서 임의의 요소를 어떻게 설정합니까?

  22. 22

    목록을 사용하여 배열의 numpy 배열에서 요소 추출

  23. 23

    3D 배열에서 첫 번째 배열의 첫 번째 배열에 요소를 추가하면 Numpy 배열의 크기가 변경됩니다.

  24. 24

    여러 배열의 모든 요소를 반복합니다.

  25. 25

    람다를 사용하여 numpy 배열 반복

  26. 26

    Numpy를 사용하여 주어진 3D 배열을 3x3 행렬의 배열로 바꾸는 방법

  27. 27

    Numpy 배열의 요소를 목록으로 변환

  28. 28

    3d Numpy 배열의 여러 값을 인덱스 목록으로 대체

  29. 29

    numpy를 사용한 2D-3D 배열 곱셈

뜨겁다태그

보관