<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 如何在 Python 中為機器學習索引,切片和重塑 NumPy 數組 > 原文: [https://machinelearningmastery.com/index-slice-reshape-numpy-arrays-machine-learning-python/](https://machinelearningmastery.com/index-slice-reshape-numpy-arrays-machine-learning-python/) 機器學習數據表示為數組。 在 Python 中,數據幾乎普遍表示為 NumPy 數組。 如果您是 Python 的新手,您可能會對某些 [pythonic](https://stackoverflow.com/questions/25011078/what-does-pythonic-mean) 訪問數據的方式感到困惑,例如負索引和數組切片。 在本教程中,您將了解如何在 NumPy 陣列中正確操作和訪問數據。 完成本教程后,您將了解: * 如何將列表數據轉換為 NumPy 數組。 * 如何使用 Pythonic 索引和切片訪問數據。 * 如何調整數據大小以滿足某些機器學習 API 的期望。 讓我們開始吧。 ![How to Index, Slice and Reshape NumPy Arrays for Machine Learning in Python](img/9c384b0ca667a815e91824f434e4dcac.jpg) 如何在 Python 中為機器學習索引,切片和重塑 NumPy 數組 [Bj?rnS?derqvist](https://www.flickr.com/photos/kapten/433809071/)的照片,保留一些權利。 ## 教程概述 本教程分為 4 個部分;他們是: 1. 從列表到數組 2. 數組索引 3. 陣列切片 4. 數組重塑 ## 1.從列表到數組 通常,我建議使用 Pandas 甚至 NumPy 函數從文件加載數據。 例如,請看帖子: * [如何在 Python 中加載機器學習數據](http://machinelearningmastery.com/load-machine-learning-data-python/) 本節假定您已通過其他方式加載或生成數據,現在使用 Python 列表表示它。 我們來看看將列表中的數據轉換為 NumPy 數組。 ### 一維列表到數組 您可以加載數據或生成數據,并以列表形式訪問它。 您可以通過調用 array()NumPy 函數將一維數據列表轉換為數組。 ``` # one dimensional example from numpy import array # list of data data = [11, 22, 33, 44, 55] # array of data data = array(data) print(data) print(type(data)) ``` 運行該示例將一維列表轉換為 NumPy 數組。 ``` [11 22 33 44 55] <class 'numpy.ndarray'> ``` ### 數組列表的二維列表 在機器學習中,你更有可能擁有二維數據。 這是一個數據表,其中每一行代表一個新觀察,每一列代表一個新特征。 也許您使用自定義代碼生成數據或加載數據,現在您有一個列表列表。每個列表代表一個新觀察。 您可以通過調用 array()函數將列表列表轉換為 NumPy 數組,方法與上面相同。 ``` # two dimensional example from numpy import array # list of data data = [[11, 22], [33, 44], [55, 66]] # array of data data = array(data) print(data) print(type(data)) ``` 運行該示例顯示已成功轉換的數據。 ``` [[11 22] [33 44] [55 66]] <class 'numpy.ndarray'> ``` ## 2.數組索引 使用 NumPy 陣列表示數據后,可以使用索引訪問它。 我們來看一些通過索引訪問數據的例子。 ### 一維索引 通常,索引的工作方式與您對其他編程語言(如 Java,C#和 C ++)的體驗一樣。 例如,您可以使用括號運算符[]訪問元素,為要檢索的值指定零偏移索引。 ``` # simple indexing from numpy import array # define array data = array([11, 22, 33, 44, 55]) # index data print(data[0]) print(data[4]) ``` 運行該示例將打印數組中的第一個和最后一個值。 ``` 11 55 ``` 指定對于數組邊界而言太大的整數將導致錯誤。 ``` # simple indexing from numpy import array # define array data = array([11, 22, 33, 44, 55]) # index data print(data[5]) ``` 運行該示例將顯示以下錯誤: ``` IndexError: index 5 is out of bounds for axis 0 with size 5 ``` 一個關鍵的區別是您可以使用負索引來檢索從數組末尾偏移的值。 例如,索引-1 指的是數組中的最后一項。對于當前示例中的第一個項,索引-2 將第二個最后一項返回到-5。 ``` # simple indexing from numpy import array # define array data = array([11, 22, 33, 44, 55]) # index data print(data[-1]) print(data[-5]) ``` 運行該示例將打印數組中的最后一項和第一項。 ``` 55 11 ``` ### 二維索引 索引二維數據類似于索引一維數據,除了使用逗號分隔每個維度的索引。 ``` data[0,0] ``` 這與基于 C 的語言不同,其中每個維度使用單獨的括號運算符。 ``` data[0][0] ``` 例如,我們可以訪問第一行和第一列,如下所示: ``` # 2d indexing from numpy import array # define array data = array([[11, 22], [33, 44], [55, 66]]) # index data print(data[0,0]) ``` 運行該示例將打印數據集中的第一個項目。 ``` 11 ``` 如果我們對第一行中的所有項目感興趣,我們可以將第二個維度索引留空,例如: ``` # 2d indexing from numpy import array # define array data = array([[11, 22], [33, 44], [55, 66]]) # index data print(data[0,]) ``` 這將打印第一行數據。 ``` [11 22] ``` ## 3.陣列切片 到現在為止還挺好;創建和索引數組看起來很熟悉。 現在我們來到數組切片,這是一個導致 Python 和 NumPy 數組初學者出現問題的功能。 像列表和 NumPy 數組這樣的結構可以被切片。這意味著可以索引和檢索結構的子序列。 在指定輸入變量和輸出變量或從測試行中分割訓練行時,這在機器學習中最有用。 使用冒號運算符':'指定切片,分別在列之前和之后使用來自'的'_ 和'_ 到 _'索引。切片從'from'索引延伸,并在'to'索引之前結束一個項目。_ ``` data[from:to] ``` 讓我們通過一些例子來解決。 ### 一維切片 您可以通過指定沒有索引的切片':'來訪問數組維度中的所有數據。 ``` # simple slicing from numpy import array # define array data = array([11, 22, 33, 44, 55]) print(data[:]) ``` 運行該示例將打印數組中的所有元素。 ``` [11 22 33 44 55] ``` 可以通過指定從索引 0 開始并在索引 1 結束的切片(“to”索引之前的一個項目)來切片數組的第一項。 ``` # simple slicing from numpy import array # define array data = array([11, 22, 33, 44, 55]) print(data[0:1]) ``` 運行該示例將返回帶有第一個元素的子數組。 ``` [11] ``` 我們也可以在切片中使用負索引。例如,我們可以通過在-2 處開始切片(第二個最后一項)并且不指定'to'索引來切片列表中的最后兩個項目;將切片帶到維度的末尾。 ``` # simple slicing from numpy import array # define array data = array([11, 22, 33, 44, 55]) print(data[-2:]) ``` 運行該示例僅返回包含最后兩個項的子數組。 ``` [44 55] ``` ### 二維切片 讓我們看看你最有可能在機器學習中使用的二維切片的兩個例子。 #### 分割輸入和輸出功能 通常將加載的數據拆分為輸入變量(X)和輸出變量(y)。 我們可以通過將所有行和所有列切片到最后一列,然后分別索引最后一列來完成此操作。 對于輸入要素,我們可以通過在行索引中指定':'來選擇除最后一行之外的所有行和所有列,并且在列 index 中指定-1。 ``` X = [:, :-1] ``` 對于輸出列,我們可以使用':'再次選擇所有行,并通過指定-1 索引僅索引最后一列。 ``` y = [:, -1] ``` 將所有這些放在一起,我們可以將 3 列 2D 數據集分成輸入和輸出數據,如下所示: ``` # split input and output from numpy import array # define array data = array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) # separate data X, y = data[:, :-1], data[:, -1] print(X) print(y) ``` 運行該示例將打印分隔的 X 和 y 元素。注意,X 是 2D 陣列,y 是 1D 陣列。 ``` [[11 22] [44 55] [77 88]] [33 66 99] ``` #### 拆分訓練和測試行 將加載的數據集拆分為單獨的訓練和測試集是很常見的。 這是行的分割,其中一些部分將用于訓練模型,剩余部分將用于估計訓練模型的技能。 這將涉及通過在第二個維度索引中指定“:”來切片所有列。訓練數據集將是從開始到分割點的所有行。 ``` dataset train = data[:split, :] ``` 測試數據集將是從拆分點到維度末尾的所有行。 ``` test = data[split:, :] ``` 將所有這些放在一起,我們可以將數據集拆分為 2 的設計分割點。 ``` # split train and test from numpy import array # define array data = array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) # separate data split = 2 train,test = data[:split,:],data[split:,:] print(train) print(test) ``` 運行該示例選擇前兩行進行訓練,選擇最后一行進行測試。 ``` [[11 22 33] [44 55 66]] [[77 88 99]] ``` ## 4.陣列重塑 切片數據后,您可能需要重新整形。 例如,某些庫(例如 scikit-learn)可能要求將輸出變量(y)的一維數組形成為具有一列的二維數組,并且每列的結果。 一些算法,如 Keras 中的長短期記憶遞歸神經網絡,需要將輸入指定為由樣本,時間步長和特征組成的三維陣列。 了解如何重塑 NumPy 數組以使您的數據滿足特定 Python 庫的期望非常重要。我們將看看這兩個例子。 ### 數據形狀 NumPy 數組具有 shape 屬性,該屬性返回數組每個維度長度的元組。 例如: ``` # array shape from numpy import array # define array data = array([11, 22, 33, 44, 55]) print(data.shape) ``` 運行該示例會打印一維的元組。 ``` (5,) ``` 對于二維數組,返回具有兩個長度的元組。 ``` # array shape from numpy import array # list of data data = [[11, 22], [33, 44], [55, 66]] # array of data data = array(data) print(data.shape) ``` 運行該示例將返回一個包含行數和列數的元組。 ``` (3, 2) ``` 您可以在形狀維度中使用數組維度的大小,例如指定參數。 可以像數組一樣訪問元組的元素,行數為第 0 個索引,列數為第 1 個索引。例如: ``` # array shape from numpy import array # list of data data = [[11, 22], [33, 44], [55, 66]] # array of data data = array(data) print('Rows: %d' % data.shape[0]) print('Cols: %d' % data.shape[1]) ``` 運行該示例可訪問每個維度的特定大小。 ``` Rows: 3 Cols: 2 ``` ### 重塑 1D 到 2D 陣列 通常需要將一維陣列重塑為具有一列和多個陣列的二維陣列。 NumPy 在 NumPy 數組對象上提供 reshape()函數,可用于重塑數據。 reshape()函數采用一個參數來指定數組的新形狀。在將一維數組重新整形為具有一列的二維數組的情況下,元組將是第一維(data.shape [0])的數組形狀和第二維的 1。 ``` data = data.reshape((data.shape[0], 1)) ``` 綜上所述,我們得到以下工作示例。 ``` # reshape 1D array from numpy import array from numpy import reshape # define array data = array([11, 22, 33, 44, 55]) print(data.shape) # reshape data = data.reshape((data.shape[0], 1)) print(data.shape) ``` 運行該示例將打印一維數組的形狀,將數組重新整形為包含 1 列的 5 行,然后打印此新形狀。 ``` (5,) (5, 1) ``` ### 重塑 2D 到 3D 陣列 通常需要重新形成二維數據,其中每行表示序列為三維陣列,用于期望一個或多個時間步長和一個或多個特征的多個樣本的算法。 一個很好的例子是 Keras 深度學習庫中的 [LSTM 遞歸神經網絡](https://keras.io/layers/recurrent/#lstm)模型。 可以直接使用重塑功能,指定新的維度。這是清楚的,其中每個序列具有多個時間步長,每個時間步長具有一個觀察(特征)。 我們可以使用數組上 shape 屬性的大小來指定樣本(行)和列的數量(時間步長),并將要素數量固定為 1。 ``` data.reshape((data.shape[0], data.shape[1], 1)) ``` Putting this all together, we get the following worked example. ``` # reshape 2D array from numpy import array # list of data data = [[11, 22], [33, 44], [55, 66]] # array of data data = array(data) print(data.shape) # reshape data = data.reshape((data.shape[0], data.shape[1], 1)) print(data.shape) ``` 首先運行示例打印 2D 陣列中每個維度的大小,重新整形數組,然后總結新 3D 陣列的形狀。 ``` (3, 2) (3, 2, 1) ``` ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [Python 非正式介紹](https://docs.python.org/3/tutorial/introduction.html) * [在 NumPy API 中創建數組](https://docs.scipy.org/doc/numpy/user/basics.creation.html) * [NumPy API 中的索引和切片](https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) * [NumPy API 中的基本索引](https://docs.scipy.org/doc/numpy/user/basics.indexing.html) * [NumPy 形狀屬性](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html) * [NumPy reshape()函數](https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html) ## 摘要 在本教程中,您了解了如何使用 Python 訪問和重塑 NumPy 數組中的數據。 具體來說,你學到了: * 如何將列表數據轉換為 NumPy 數組。 * 如何使用 Pythonic 索引和切片訪問數據。 * 如何調整數據大小以滿足某些機器學習 API 的期望。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看