<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 用 NumPy 陣列輕松介紹廣播 > 原文: [https://machinelearningmastery.com/broadcasting-with-numpy-arrays/](https://machinelearningmastery.com/broadcasting-with-numpy-arrays/) 不能添加,減去或通常在算術中使用具有不同大小的數組。 克服這個問題的一種方法是復制較小的數組,使其尺寸和大小與較大的數組相同。這稱為陣列廣播,在執行數組運算時可在 NumPy 中使用,這可以大大減少和簡化代碼。 在本教程中,您將發現陣列廣播的概念以及如何在 NumPy 中實現它。 完成本教程后,您將了解: * 具有不同大小的數組的算術問題。 * 廣播的解決方案和一維和二維的常見例子。 * 陣列廣播規則和廣播失敗時。 讓我們開始吧。 ![Introduction to Broadcasting with NumPy Arrays](img/bae7772c8e64065ad2ec65a9f752813a.jpg) 使用 NumPy 陣列進行廣播的介紹 [pbkwee](https://www.flickr.com/photos/rimuhosting/7689904958/) 的照片,保留一些權利。 ## 教程概述 本教程分為 4 個部分;他們是: 1. 數組運算的局限性 2. 陣列廣播 3. 在 NumPy 廣播 4. 廣播的局限性 ## 數組運算的局限性 您可以直接在 NumPy 數組上執行算術運算,例如加法和減法。 例如,可以將兩個數組相加以創建一個新數組,其中每個索引的值都加在一起。 例如,數組 a 可以定義為[1,2,3],數組 b 可以定義為[1,2,3],加在一起將產生一個值為[2,4,6]的新數組。 ``` a = [1, 2, 3] b = [1, 2, 3] c = a + b c = [1 + 1, 2 + 2, 3 + 3] ``` 嚴格地說,算術只能在具有相同尺寸和尺寸的相同尺寸的陣列上執行。 這意味著長度為 10 的一維數組只能與另一個長度為 10 的一維數組進行算術運算。 對陣列算術的這種限制確實非常有限。值得慶幸的是,NumPy 提供了一個內置的解決方法,允許在具有不同大小的數組之間進行算術運算。 ## 陣列廣播 廣播是 NumPy 用于允許具有不同形狀或大小的數組之間的數組運算的方法的名稱。 盡管該技術是針對 [NumPy](https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html) 開發的,但它在其他數值計算庫中也被廣泛采用,例如 [Theano](http://deeplearning.net/software/theano/tutorial/broadcasting.html) , [TensorFlow](https://www.tensorflow.org/performance/xla/broadcasting) 和 [Octave](https://www.gnu.org/software/octave/doc/v4.2.1/Broadcasting.html) 。 廣播通過實際上沿著最后的不匹配維度復制較小的陣列來解決不同形狀的陣列之間的算術問題。 > 術語廣播描述了 numpy 如何在算術運算期間處理具有不同形狀的數組。受某些約束的影響,較小的陣列在較大的陣列上“廣播”,以便它們具有兼容的形狀。 - [廣播](https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html),SciPy.org NumPy 實際上并沒有復制較小的數組;相反,它使存儲器和計算上有效地使用存儲器中的現有結構,實際上實現了相同的結果。 該概念還滲透了線性代數符號,以簡化簡單操作的解釋。 > 在深度學習的背景下,我們也使用一些不太常規的符號。我們允許添加矩陣和向量,產生另一個矩陣:C = A + b,其中 Ci,j = Ai,j + bj。換句話說,向量 b 被添加到矩陣的每一行。這種簡化消除了在添加之前定義將 b 復制到每行中的矩陣的需要。將 b 隱式復制到許多位置稱為廣播。 - 第 34 頁,[深度學習](http://amzn.to/2qJRxrv),2016 年。 ## 在 NumPy 廣播 我們可以通過查看 NumPy 中的三個例子來制作廣播。 本節中的示例并非詳盡無遺,而是與您可能看到或實施的廣播類型相同。 ### 標量和一維數組 單個值或標量可用于具有一維數組的算術。 例如,我們可以設想一維數組“a”,其中三個值[a1,a2,a3]被添加到標量“b”。 ``` a = [a1, a2, a3] b ``` 標量需要通過將其值重復 2 次來跨一維數組進行廣播。 ``` b = [b1, b2, b3] ``` 然后可以直接添加兩個一維陣列。 ``` c = a + b c = [a1 + b1, a2 + b2, a3 + b3] ``` 以下示例在 NumPy 中演示了這一點。 ``` # scalar and one-dimensional from numpy import array a = array([1, 2, 3]) print(a) b = 2 print(b) c = a + b print(c) ``` 運行該示例首先打印定義的一維數組,然后是標量,然后是結果,其中標量被添加到數組中的每個值。 ``` [1 2 3] 2 [3 4 5] ``` ### 標量和二維數組 標量值可用于具有二維數組的算術。 例如,我們可以想象一個二維數組“A”,其中 2 行和 3 列添加到標量“b”。 ``` a11, a12, a13 A = (a21, a22, a23) b ``` 標量將需要在二維陣列的每一行上進行廣播,方法是將其復制 5 次。 ``` b11, b12, b13 B = (b21, b22, b23) ``` 然后可以直接添加兩個二維陣列。 ``` C = A + B a11 + b11, a12 + b12, a13 + b13 C = (a21 + b21, a22 + b22, a23 + b23) ``` The example below demonstrates this in NumPy. ``` # scalar and two-dimensional from numpy import array A = array([[1, 2, 3], [1, 2, 3]]) print(A) b = 2 print(b) C = A + b print(C) ``` 運行該示例首先打印定義的二維數組,然后打印標量,然后將值為“2”的加法結果添加到數組中的每個值。 ``` [[1 2 3] [1 2 3]] 2 [[3 4 5] [3 4 5]] ``` ### 一維和二維陣列 一維數組可用于具有二維陣列的算術。 例如,我們可以想象一個二維數組“A”,其中 2 行 3 列添加到具有 3 個值的一維數組“b”。 ``` a11, a12, a13 A = (a21, a22, a23) b = (b1, b2, b3) ``` 通過創建第二副本以產生新的二維陣列“B”,在二維陣列的每一行上廣播一維陣列。 ``` b11, b12, b13 B = (b21, b22, b23) ``` The two two-dimensional arrays can then be added directly. ``` C = A + B a11 + b11, a12 + b12, a13 + b13 C = (a21 + b21, a22 + b22, a23 + b23) ``` 以下是 NumPy 中的一個有效例子。 ``` # one-dimensional and two-dimensional from numpy import array A = array([[1, 2, 3], [1, 2, 3]]) print(A) b = array([1, 2, 3]) print(b) C = A + b print(C) ``` 運行該示例首先打印定義的二維數組,然后打印定義的一維數組,接著是結果 C,其中實際上二維數組中的每個值都加倍。 ``` [[1 2 3] [1 2 3]] [1 2 3] [[2 4 6] [2 4 6]] ``` ## 廣播的局限性 廣播是一種方便的快捷方式,在使用 NumPy 數組時在實踐中非常有用。 話雖如此,它并不適用于所有情況,實際上強加了一個嚴格的規則,必須滿足廣播要執行。 算術(包括廣播)只能在數組中每個維度的形狀相等或者維度大小為 1 時執行。維度以相反的順序考慮,從尾隨維度開始;例如,在二維情況下查看行之前的列。 當我們考慮 NumPy 在比較數組時實際填充缺少尺寸為“1”的尺寸時,這更有意義。 因此,具有 2 行和 3 列的二維數組“A”與具有 3 個元素的向量“b”之間的比較: ``` A.shape = (2 x 3) b.shape = (3) ``` 實際上,這成了一個比較: ``` A.shape = (2 x 3) b.shape = (1 x 3) ``` 同樣的概念適用于被視為具有所需維數的數組的標量之間的比較: ``` A.shape = (2 x 3) b.shape = (1) ``` 這成為以下方面的比較: ``` A.shape = (2 x 3) b.shape = (1 x 1) ``` 當比較失敗時,不能執行廣播,并且引發錯誤。 下面的示例嘗試將兩元素陣列廣播到 2 x 3 陣列。這種比較有效: ``` A.shape = (2 x 3) b.shape = (1 x 2) ``` 我們可以看到最后的維度(列)不匹配,我們希望廣播失敗。 The example below demonstrates this in NumPy. ``` # broadcasting error from numpy import array A = array([[1, 2, 3], [1, 2, 3]]) print(A.shape) b = array([1, 2]) print(b.shape) C = A + b print(C) ``` 運行該示例首先打印陣列的形狀,然后在嘗試廣播時引發錯誤,正如我們預期的那樣。 ``` (2, 3) (2,) ValueError: operands could not be broadcast together with shapes (2,3) (2,) ``` ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 使用 NumPy 陣列創建三個新的和不同的廣播示例。 * 實現您自己的廣播功能,以便在一維和二維情況下進行手動廣播。 * 基準 NumPy 廣播和您自己的自定義廣播功能,具有非常大的陣列的一維和二維情況。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 圖書 * 第 2 章,[深度學習](http://amzn.to/2CFmZZw),2016 年。 ### 用品 * [廣播,NumPy API](https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html) ,SciPy.org * [TensorFlow](https://www.tensorflow.org/performance/xla/broadcasting) 中的廣播語義 * [數組廣播在 numpy](http://scipy.github.io/old-wiki/pages/EricsBroadcastingDoc) ,EricsBroadcastingDoc 中 * [廣播](http://deeplearning.net/software/theano/tutorial/broadcasting.html),Theano * [Numpy](https://eli.thegreenplace.net/2015/broadcasting-arrays-in-numpy/) ,2015 年的廣播陣列。 * [八度廣播](https://www.gnu.org/software/octave/doc/v4.2.1/Broadcasting.html) ## 摘要 在本教程中,您發現了陣列廣播的概念以及如何在 NumPy 中實現。 具體來說,你學到了: * 具有不同大小的數組的算術問題。 * 廣播的解決方案和一維和二維的常見例子。 * 陣列廣播規則和廣播失敗時。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看