English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NumPy 비트 연산

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배열。