플랫텐과 ravel

5634 단어 파이썬numpy
안녕하세요.
어제의 기사는 이마이치이므로 더 분해해, 이해를 깊게 하고 싶습니다.

오늘은 flatten 함수와 ravel 함수의 차이입니다.
어느 쪽도 배열을 일원화하기 위한 함수입니다.
기본적으로는 flatten 함수를 사용하는 것 같습니다만, ravel 함수가 처리가 빠른 경우도 있는 것 같습니다.
그럼, 각각 봅시다.

flatten 정보



우선 t에 flatten API

numpy.ndarray.flatten(order = ‘C’)

파라미터로서 order를 가지지만, 이번의 내용에는 그다지 관계가 없기 때문에 자세한 것은 덮을 수 있습니다.
만약, 걱정되는 사람은 flatten 를 봐 주세요.
예문을 보자.
import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
a = np.reshape((2, 5))
b[4] = 251
b = a.flatten()
print('a : ', a)
print('b : ', b)
a :  [[ 1  2  3  4  5]
    [ 6  7  8  9 10]]

b :  [   1    2    3    4 251    6    7    8    9   10]

표시하기 전에 b의 index=5 곳에 251이라는 소수를 넣어도 원래의 "a"는 변하지 않습니다.
왜 소수인가? 아름답기 때문에. 웃음

이야기를 되돌리면, a.flatten()의 곳에서 "a"는 카피되어 b에 건네지고 있는 것이군요.
그렇다면 ravel은 어떻습니까?

ravel 정보



처음에 ravel의 API

numpy.ravel(a, order=’C’)
또는,
numpy.ndarray.ravel(order=’C’)

우선 첫 번째 차이로 ravel의 경우는 1차원 배열로 하고 싶은 배열을 파라미터로서 가질 수 있습니다.
또 다른 차이가 있습니다.
일단 다음 코드를 살펴 보겠습니다.

샘플 코드


import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape((2, 5))
# b = np.ravel(a)とも書ける。
b = a.ravel()
b[4] = 251
print('a : ', a, end='\n\n')
print('b : ', b)
a :  [[  1   2   3   4 251]
      [  6   7   8   9  10]]

b :  [  1   2   3   4 251   6   7   8   9  10]

무려! ! ! !
차이가 명확해졌어요.
ravel의 경우는 b에 a의 참조를 건네주고 있는 것이군요.

결국 차이는?



flatten() : 복사본을 전달합니다.
ravel() : 참조를 전달합니다. 그리고 쓰는 방법이 두 가지 있다.

어느 것이 좋습니까?



그것은 시간과 경우에 따라 다릅니다.
빠른 분은 ravel
하지만 1차원 배열로 바꾸기 전의 데이터도 사용하고 싶다면 flatten이라는 곳이지요.
어느 쪽도 알아 두면 처리가 몇 배나 빨라질지도 모릅니다.

고마워요!

참고문헌



flatten1
flatten2
ravel

좋은 웹페이지 즐겨찾기