English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
NumPy 방송은 NumPy가 수학 연산 중 다른 형태의 배열을 처리하는 데 주로 사용됩니다. 일부 제약 조건에 따라 작은 배열이 큰 배열 위에서 "방송"되어 호환 가능한 형태를 가집니다.
NumPy 연산은 일반적으로 배열 쌍에 대해 원소별로 완료됩니다. 가장 간단한 경우, 두 배열은 완전히 동일한 형태를 가지고 있어야 합니다. 예를 들어:
>>> import numpy as np >>> a = np.array([1, 2, 3)) >>> b = np.array([2, 2, 2)) >>> a * b array([ 2, 4, 6))
연산에서 2 다수의 배열의 형태가 다를 때, numpy는 자동으로 방송 메커니즘을 트리거합니다. 예를 들어:
>>> import numpy as np >>> a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) >>> b = np.array([1,2,3)) >>> print(a + b) [[ 1 2 3]] [11 12 13]] [21 22 23]] [31 32 33]]
이미지를 보여줍니다. 배열 b가 어떻게 방송을 통해 배열 a와 호환되는지.
4x3 의 이차원 배열과 길이가 3 의 원소 배열을 더하면, 배열 b가 이차원에서 반복되는 것과 동일합니다. 4 다시 계산:
>>> import numpy as np >>> a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) >>> b = np.array([1,2,3)) >>> bb = np.tile(b, (4, 1)) # b의 각 차원을 반복 >>> print(a + bb) [[ 1 2 3]] [11 12 13]] [21 22 23]] [31 32 33]]
두 배열에 대해 실행될 때, NumPy는 형태를 원소별로 비교합니다. 그는 끝 축에서 시작하여 앞으로 나아갑니다. 두 크기가 호환되면
그들은 같거나
중 하나는1
이 조건을 만족하지 않으면 ValueError: operands could not be broadcast together 예외가 발생하여, 배열이 불일치하는 형태를 가지고 있다고 표시합니다. 결과 배열의 크기는 입력의 각 축에 대해1의 크기가 있습니다.
배열은 동일한 차원 수를 가지지 않아도 됩니다. 예를 들어, 당신이256x256x3RGB 값 배열이며, 이미지 중 각 색상을 다른 값으로 확대하고 싶다면, 이미지를 확대된 값을 가진3개 값의 일원 배열입니다. 방송 규칙에 따라 이 배열들의 끝 축 크기를 정렬하여, 그들은 호환된다고 표시합니다:
Image (3d array): 256 x 256 x 3 Scale (1d array): 3 Result (3d array): 256 x 256 x 3
비교하는任何一个 크기가1이 때, 다른 크기로 사용됩니다. 다시 말해, 크기가1의 크기는 늘려지거나 "복제"되어 다른 크기와 일치합니다. 다음 예제에서, A와 B 배열은 길이가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
다음은 몇 가지 예제:
A (2d array): 5 x 4 B (1d array): 1 Result (2d array): 5 x 4 A (2d array): 5 x 4 B (1d array): 4 Result (2d array): 5 x 4 A (3d array): 15 x 3 x 5 B (3d array): 15 x 1 x 5 Result (3d array): 15 x 3 x 5 A (3d array): 15 x 3 x 5 B (2d array): 3 x 5 Result (3d array): 15 x 3 x 5 A (3d array): 15 x 3 x 5 B (2d array): 3 x 1 Result (3d array): 15 x 3 x 5
다음은 방송되지 않는 형태 예제:
A (1d array): 3 B (1d array): 4 #끝 차원 불일치 A (2d array): 2 x 1 B (3d array): 8 x 4 x 3 #마지막 두 번째 차원 불일치
브로드캐스트의 실제 예제:}
>>> import numpy as np >>> x = np.arange(4) >>> xx = x.reshape(4,1) >>> y = np.ones(5) >>> z = np.ones(3,4)) >>> x.shape (4,) >>> y.shape (5,) >>> x + y ValueError: operands could not be broadcast together with shapes (4,) (5,) >>> xx.shape (4, 1) >>> y.shape (5,) >>> (xx + y).shape (4, 5) >>> xx + y array([[ 1., 1., 1., 1., 1.], [ 2., 2., 2., 2., 2.], [ 3., 3., 3., 3., 3.], [ 4., 4., 4., 4., 4.]]) >>> x.shape (4,) >>> z.shape (3, 4) >>> (x + z).shape (3, 4) >>> x + z array([[ 1., 2., 3., 4.], [ 1., 2., 3., 4.], [ 1., 2., 3., 4.]])
브로드캐스트는 두 배열의 외적(또는 다른 어떤 외부 연산)을 쉽게 얻는 방법을 제공합니다. 다음 예제는 두1-d 배열의 외적 연산:
>>> import numpy as np >>> a = np.array([0.0, 10.0, 20.0, 30.0]) >>> b = np.array([1.0, 2.0, 3.0]) >>> a[:, np.newaxis] + b array([[ 1., 2., 3.], [ 11., 12., 13.], [ 21., 22., 23.], [ 31., 32., 33.]])
여기 newaxis인덱스 연산자를 새로운 축으로 삽입 a 이를 두차원으로 만들기 위해 4x1배열을 4x1배열과 형태가 (3,)의 b조합하여 하나의 4x3배열。