NumPy 의 Broadcasting 방송 체 제 를 깊이 분석 하 다.

머리말
오 은 달 선생님 의 심도 있 는 학습 전문 과정 에서 선생님 께 서 NumPy 의 방송 체 제 를 언급 하 셨 고 그 주의 테스트 도 방송 체제 와 관련 된 문제 가 있 었 다.그렇다면 도대체 NumPy 의 방송 메커니즘 은 무엇 일 까?
공식 문서
다음은 공식 문 서 를 볼 시간 이다.
Array Broadcasting in Numpy
방송 메커니즘 개술
numpy 에서 더 고 급 스 러 운 개념 을 탐색 해 보 자.이 개념 은 방송 이 라 고 불 린 다.방송 은 NumPy 가 산술 연산 기간 에 서로 다른 모양 의 배열 을 어떻게 처리 하 는 지 를 보 여 준다.어떤 제약 을 받 아 작은 배열 은 비교적 큰 배열 에서'방송'을 해서 똑 같은 모양 을 가지 게 할 것 이다.방송 은 파 이 썬 이 아 닌 C 에서 순환 하도록 배열 벡터 화 작업 을 제공 했다.그것 은 불필요 한 데 이 터 를 복사 하지 않 아 도 완성 할 수 있 고 보통 알고리즘 의 효율 도 매우 높다.물론 어떤 상황 에서 방송 은 좋 은 방법 이 아니다.메모리 사용 효율 이 낮 아 계산 속 도 를 늦 출 수 있 기 때문이다.본 고 는 예 시 를 통 해 방송 에 대해 상세 한 소 개 를 진행 하 였 다.방송 을 언제 사용 할 지 에 대한 힌트 도 제공한다.
numpy 작업 은 보통 요소 마다 이 루어 집 니 다.이 는 두 배열 이 똑 같은 모양 을 가 져 야 합 니 다.
Example 1

>>> from numpy import array
>>> a = array([1.0, 2.0, 3.0])
>>> b = array([2.0, 2.0, 2.0])
>>> a * b
array([ 2.,  4.,  6.])
배열 의 모양 이 어떤 조건 을 만족 시 킬 때 numpy 의 방송 규칙 은 이러한 배열 제한 을 완화 할 것 이다.배열 과 스칼라 값 을 함께 연산 할 때 가장 간단 한 방송 예제 가 나타 납 니 다.
Example 2

>>> from numpy import array
>>> a = array([1.0,2.0,3.0])
>>> b = 2.0
>>> a * b
array([ 2.,  4.,  6.])
하나의 변수 만 배열 이지 만 결 과 는 이전의 코드 예 와 같 습 니 다.우 리 는 그 중의 스칼라 가 산술 연산 에서 배열a변수 와 같은 배열 로 확대 되 었 다 고 볼 수 있다.예 를 들 어 다음 그림 에 표 시 된 확장 요 소 는 원본 스칼라 의 사본 일 뿐 입 니 다.이런 확장 은 단지 개념 적 인 것 이다.numpy 의 현명 한 점 은 원본 스칼라 값 을 사용 하여 복사 본 을 만 들 필요 가 없 기 때문에 방송 작업 이 가능 한 한 메모 리 를 절약 하여 계산 효율 을 높이 는 것 이다.위의 코드 예 에서 곱셈 과정 에서 스칼라 이동 메모리 가 비교적 적기 때문에 백만 개의 요소 배열 을 가 진 윈도 2000 에서 방송 체 제 는 이전의 두 배열 에 비해 약 10%빠르다.
Vector-Scalar multiplication
가장 간단 한 방송 예제 에서 스칼라ba와 같은 모양 의 배열 로 늘 어 나 이 모양 들 을 요소 별 곱셈 에 적용 한다.
다음 규칙 은 두 개의 호 환 형 태 를 가 진 배열 이 하나의 코드 세그먼트 에서 방송 할 수 있 는 지 여 부 를 결정 한다.
방송 메커니즘 규칙
방송 규칙
방송 을 위해 서 는 두 배열 의 꼬리 축 크기 가 같 아야 하거나 그 중 하 나 는 하나 여야 한다.
문제 가 생 겼 습 니 다.꼬리 축 은 무엇 입 니까?
이 때문에 나 는 이 해답 을 찾 았 다.
If you have two arrays with different dimensions number, say one 1x2x3 and other 2x3, then you compare only the trailing common dimensions, in this case 2x3. But if both your arrays are two-dimensional, then their corresponding sizes have to be either equal or one of them has to be 1.
In your case you have a 2x2 and 4x2 and 4 != 2 and neither 4 or 2 equals 1, so this doesn't work.
만약 당신 이 두 개의 서로 다른 차원 의 배열 을 가지 고 있다 고 가정 하 세 요.하 나 는 1x2x 3 이 고 다른 하 나 는 2x3 이다.그러면 뒤의 공공 사 이 즈 를 비교 해 야 한다.이런 상황 에서 2x3 이다.그러나**두 배열 이 모두 2 차원 이 라면 대응 하 는 크기 가 같 거나 그 중 하 나 는 1**이 어야 합 니 다.
2 차원 배열 중 2x2 와 4x2,4!=2,그리고 4,2 는 모두 1 이 아니 기 때문에 방송 이 통 하지 않 는 다.
이 해석 은 비교적 명확 할 것 이다.
이 조건 을 만족 시 키 지 않 으 면 이상 을 일 으 켜 배열 의 모양 이 호 환 되 지 않 음 을 알려 줍 니 다.방송 작업 이 만 든 결과 배열 의 크기 는 두 배열 의 각 차원 의 최대 크기 입 니 다.이 규칙 은 같은 차원 의 두 배열 이 필요 하 다 는 것 을 설명 하지 않 았 음 을 주의 하 세 요.256 x 256 x 3 의 RGB 값 배열 이 있 으 면 그림 의 각 색상 을 다른 값 으로 크기 조정 하려 면 그림 을 3 개의 값 을 가 진 1 차원 배열 로 곱 할 수 있 습 니 다.
Image
(3d array)
256 x
256 x
3
Scale
(1d array)
3
Result
(3d array)
256 x
256 x
3
아래 의 예제 에서 두 배열 은 모두 길이 가 1 인 축 을 가지 고 있 으 며,이 축 들 은 방송 작업 에서 더욱 큰 크기 로 확장 되 었 다.
A
(4d array)
8 x
1 x
6 x
1
B
(3d array)
7 x
1 x
5
Result
(4d array)
8 x
7 x
6 x
5
다음은 몇 가지 코드 예 와 도형 표시 로 방송 규칙 을 직관 적 이 고 명확 하 게 하 는 데 도움 이 된다.예 3.1 차원 배열 을 2 차원 배열 에 추가 합 니 다.
Example 3

>>> from numpy import array
>>> a = array([[ 0.0,  0.0,  0.0],
...            [10.0, 10.0, 10.0],
...            [20.0, 20.0, 20.0],
...            [30.0, 30.0, 30.0]])
>>> b = array([1.0, 2.0, 3.0])
>>> a + b
array([[  1.,   2.,   3.],
       [ 11.,  12.,  13.],
       [ 21.,  22.,  23.],
       [ 31.,  32.,  33.]])
다음 그림 2 에서 보 듯 이 b 는 차원 의 크기 를a와 같이 확대 할 것 이다.그림 3 에서b의 열 차원 이a보다 클 때 모양 이 호 환 되 지 않 아 이상 을 일으킨다.
Matrix-Vector
1 차원 배열 요소 의 수량 이 2 차원 배열 의 수량 과 일치 하면 2 차원 배열 을 1 차원 배열 로 곱 하면 방송 이 된다.
배열 의 끝 이 같 지 않 을 때 방송 은 실 패 됩 니 다.첫 번 째 배열 의 줄 에 있 는 값 과 두 번 째 배열 의 요 소 를 정렬 하여 요소 덧셈 을 할 수 없 기 때 문 입 니 다.

방송 은 두 배열 의 외부 곱 하기(또는 다른 외부 조작)를 얻 는 편리 한 방법 을 제공 했다.아래 의 예 는 두 개의 1 차원 배열 의 외부 덧셈 연산 을 나타 내 는데 그 결 과 는 예제 3 과 같다.
Example 4

>>> from numpy import array, newaxis
>>> a = array([0.0, 10.0, 20.0, 30.0])
>>> b = array([1.0, 2.0, 3.0])
>>> a[:,newaxis] + b
array([[  1.,   2.,   3.],
       [ 11.,  12.,  13.],
       [ 21.,  22.,  23.],
       [ 31.,  32.,  33.]])
여기 서 new xis 색인 연산 자 는 새 축 을 2 차원 4x1 배열 로 삽입 합 니 다.그림 4 는 두 배열 의 스 트 레 칭 이 필요 한 4x3 출력 배열 을 만 드 는 것 을 설명 한다.
여기 서 예 는b = array([1.0, 2.0, 3.0])이지 만 다음 그림 은0,1,2,emmmm...원문 을 존중 하 세 요!
vector-vector with newaxis
어떤 경우 에 방송 은 두 개의 배열 을 늘 려 서 그 어떠한 초기 배열 보다 큰 출력 배열 을 형성한다.
총결산
이상 은 공식 문서 에 대한 번역 이 고 전체적으로 보면 방송 체 제 는 주로 다음 과 같은 몇 가지 이다.
  • 효율 이 빠 르 고 성능 이 좋다
  • 방송 할 때 작업 중 두 배열 의 꼬리 축 의 크기 가 같 아야 하거나 그 중 하 나 는 1
  • 이 어야 한다.
  • 만약 에 두 배열 이 모두 2 차원 이 라면 그들의 대응 크기 는 반드시 같 아야 하거나 그 중 하 나 는 1
  • 이 어야 한다.
    이 글 을 통 해 당신 은 NumPy 의 방송 메커니즘 을 이 해 했 습 니까?더 많은 NumPy Broadcasting 방송 메커니즘 에 관 한 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기