파이썬 배열 인덱스 찾기 - paisseon baeyeol indegseu chajgi

안녕하세요.. 벌써 올해도 한달하고도 10일도 채 남지 않았네요..! 저도 뭐한지 모르게 벌써 올해가 다 지나가버렸어요ㅠㅠ

deep learning을 하면서 numpy array를 쓰게되네요! list와 비슷하면서도 다르네요!

결론적으로는 list의 index와 똑(?)같아요 비슷해요..!!

                                                            내가 어디서 찾을지

numpy.where( numpy배열 == 찾을 값)

  무슨 값을 찾을지!

파이썬 배열 인덱스 찾기 - paisseon baeyeol indegseu chajgi

- list의 index를 찾습니다.(상수 2를 찾으니 a의 list index가 1인걸 알 수 있어요)

- a = numpy.array를 이용해서 (값, 형식)으로 numpy 배열을 만들어 줍니다!

- numpy.where(a == 5)을 이용해서 Index를 찾을 수 있습니다!

- 이건 저도 한번 해본 건데요!! list.index는 list속 list의 값의 index값은 찾을 수 없는데 where은 가능 합니다!!

- 근데 위 그림을 보시면 numpy array 속 array는 where을 사용하니 인덱스를 알려주네요!!(별거 아닌거 같지만 코딩시 큰 차이가 날 것 같네요!)

#참고용으로 한번 보세요!!--------------------------------------

import numpy as np                      #이건 numpy를 np라는 약어(?)로 쓰기 위함입니다!(as가 별명인가 하시죠?)

for i in range(0,len(Y_result)) :

Y_AMax  = max(Y_result[i-1])                    #현재 numpy array 중 가장 큰 값을 얻습니다. (list에도 존재하는 함수!)

Y_AInx    = np.where(Y_result[i]== Y_resultMax)   #얻은 가장 큰 값의 index를 알아냅니다.

저같은 경우에는 수천개의 numpy array속 가장 큰 값의 index를 얻기위에 위 소스 같이 했어요!

(두 numpy array의 index를 비교 할 일이 있어서 사용 했습니다.)

제가 가장 헷갈렸던게 np.where(Y_result[i] == 값) 입니다.   

해당 파랑색 글자에.. 배열을 계속 안써주면서 왜 안되는지를 찾아 헤매고 다녔습니다. ㅠㅠ

(생각해보니 당연히 어디서 찾는지를 명시해주지 않고 오류가나니 계속 헤맸던거죠)

모두 칼퇴를 바랍니당

1. List.index(element)

List 내에서 element의 번호(index)를  리턴합니다. 없는 경우 ValueError

>>> list = ['사과', '바나나', '오렌지', '포도']
>>> list.index('포도')
3
>>> list.index('사과')
0
>>> list.index('망고')
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: '망고' is not in list

다른 프로그래밍 언어에서는 없는요소의 index를 찾을 경우 -1을 리턴하는 경우가 있지만 Python에서는 ValueError를 리턴한다는 사실을 인지하여 헷갈리지 말아야겠습니다.

2. element in List

List 내에 element 가 있는지 여부를 리턴합니다. ( True / False )

>>> 12 in [12,25,32,47]
True
>>> 14 in [12,25,32,47]
False
>>> 25 not in [12,25,32,47]
False
>>> 17 not in [12,25,32,47]
True

not in 은 말그대로 없는지 여부를 리턴합니다. ( True / False )

3. List.count(element)

List 내에 element의 개수를 리턴합니다.

>>> list = [1,3,4,9,13,17,1,3,5,4]
>>> list.count(3)
2
>>> list.count(13)
1
>>> list.count(15)
0

  1. for 루프를 사용하여 요소의 모든 발생 인덱스 찾기
  2. numpy.where()함수를 사용하여 Python에서 요소의 모든 발생 색인 찾기
  3. more_itertools.locate()함수를 사용하여 요소의 모든 발생 인덱스를 찾습니다
파이썬 배열 인덱스 찾기 - paisseon baeyeol indegseu chajgi

목록은 Python에서 단일 이름으로 여러 요소를 저장하는 데 사용됩니다. 각 요소는 목록에서의 위치를 ​​사용하여 액세스 할 수 있습니다. 요소는 목록의 여러 위치에있을 수 있습니다.

이 튜토리얼에서는 목록에서 특정 요소의 모든 발생 인덱스를 찾는 방법을 소개합니다. 다음 목록을 사용하여 1요소의 모든 인덱스를 찾습니다.

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

for 루프를 사용하여 요소의 모든 발생 인덱스 찾기

목록을 쉽게 반복하고 각 요소를 필요한 요소와 비교하고 색인을 찾을 수 있습니다. 최종 결과를 새 목록에 저장할 수 있습니다. 다음 예에서는range()함수를 사용하여 목록을 반복합니다.

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = []
x = 1 #The required element

for i in range(len(l1)):
    if l1[i] == x:
        pos.append(i)
print(pos)

출력:

위의 코드를보다 효율적이고 간결하게 구현하는 방법은 아래 목록 이해를 사용하는 것입니다.

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

pos = [i for i in range(len(l1)) if l1[i]==1]
print(pos)

출력:

마찬가지로 인덱스와 값을 함께 반환하는enumerate()함수를 사용할 수도 있습니다. 예를 들면 :

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = [i for i, x in enumerate(l1) if x == 1]
print(pos)

출력:

numpy.where()함수를 사용하여 Python에서 요소의 모든 발생 색인 찾기

NumPy 라이브러리에는 특정 조건에 따라 배열에서 요소의 인덱스를 반환하는 데 사용되는where()함수가 있습니다. 이 방법의 경우 목록을 배열로 전달해야합니다. 최종 결과도 배열에 있습니다. 다음 코드 스 니펫은이 메서드를 사용하는 방법을 보여줍니다.

import numpy as np

l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]

pos = np.where(np.array(l1) == 1)[0]

print(pos)

출력:

more_itertools는 타사의 편리한 모듈입니다. iterable로 작업 할 때 효율적이고 간결한 코드를 만들 수있는 많은 함수가 있습니다. 이 모듈의locate()함수는 조건에 대해True 인 요소의 인덱스를 반환합니다. itertools 객체를 반환합니다. 다음 코드 스 니펫은이 방법을 사용하는 방법을 설명합니다.

from more_itertools import locate

l1 = [1,5,1,8,9,15,6,2,1]

pos = list(locate(l1, lambda x: x == 1))

print(pos)

출력:

최종 결과가 목록 형식인지 확인하기 위해list()함수를 사용합니다.