NumPy - 陣列分割



分割 NumPy 陣列

在 NumPy 中分割陣列是將單個數組分成多個子陣列的一種方法。這可以沿任何軸進行,具體取決於您希望如何劃分資料。NumPy 提供了多種函式以不同的方式分割陣列。如下所示 -

  • 使用 numpy.split() 函式
  • 使用 numpy.array_split() 函式
  • 使用 numpy.hsplit() 函式
  • 使用 numpy.vsplit() 函式
  • 使用 numpy.dsplit() 函式

使用 split() 函式分割陣列

我們可以在 NumPy 中使用 split() 函式將陣列沿指定軸分割成多個子陣列。陣列根據提供的索引進行劃分。以下是語法 -

numpy.split(array, indices_or_sections, axis=0)

其中,

  • array − 要分割的輸入陣列。

  • indices_or_sections − 這可以是整數或排序整數的一維陣列。

    如果為整數,則指定要建立的等大小子陣列的數量。陣列必須能被此數量的段均勻地整除。

    如果為排序整數的一維陣列,則指定分割陣列的點。

  • axis − 要沿其分割陣列的軸。預設為 0(對於二維陣列,沿行分割)。

示例:分割成等大小的子陣列

在下面的示例中,我們使用 numpy.split() 函式沿列(axis=1)將陣列“arr”分割成 3 個相等的子陣列 -

import numpy as np

# array
arr = np.arange(9).reshape(3, 3)

# Split into 3 equal sub-arrays 
split_arr = np.split(arr, 3, axis=1)

print("Original Array:")
print(arr)
print("\nSplit into 3 equal sub-arrays along axis 1:")
for sub_arr in split_arr:
   print(sub_arr)

獲得的輸出如下 -

Original Array:
[[0 1 2]
 [3 4 5]
 [6 7 8]]

Split into 3 equal sub-arrays along axis 1:
[[0]
 [3]
 [6]]
[[1]
 [4]
 [7]]
[[2]
 [5]
 [8]]

示例:在特定索引處分割

在這裡,我們使用 NumPy 中的 split() 函式沿行(axis=0)在索引 [1, 2] 處分割陣列 -

import numpy as np

# array
arr = np.arange(9).reshape(3, 3)

# Split array at specified indices
split_arr = np.split(arr, [1, 2], axis=0)

print("\nSplit at indices [1, 2] along axis 0:")
for sub_arr in split_arr:
   print(sub_arr)

這將產生以下結果 -

Split at indices [1, 2] along axis 0:
[[0 1 2]]
[[3 4 5]]
[[6 7 8]]

使用 array_split() 函式分割陣列

我們也可以使用 NumPy 中的 array_split() 函式將陣列沿指定軸分割成多個子陣列。與 numpy.split() 函式不同,array_split() 函式允許不等分割,如果陣列不能被均勻地分割。

當陣列不能被指定數量的段均勻地整除時,numpy.array_split() 函式確保生成的子陣列的大小盡可能相等,並將任何額外的元素分配到前面的子陣列。以下是語法 -

numpy.array_split(array, indices_or_sections, axis=0)

其中,

  • array − 要分割的輸入陣列。

  • indices_or_sections − 這可以是整數或排序整數的一維陣列。

    如果為整數,則指定要建立的等大小子陣列的數量。陣列必須儘可能地被均勻地分割。

    如果為排序整數的一維陣列,則指定分割陣列的點。

  • axis − 要沿其分割陣列的軸。預設為 0(對於二維陣列,沿行分割)。

示例

在下面的示例中,我們使用 numpy.array_split() 函式將具有“10”個元素的一維陣列分割成 3 個不相等的子陣列 -

import numpy as np

# array
arr = np.arange(10)

# Split into 3 sub-arrays along axis 0
split_arr = np.array_split(arr, 3)

print("Original Array:")
print(arr)
print("\nSplit into 3 unequal sub-arrays:")
for sub_arr in split_arr:
   print(sub_arr)

以上程式碼的輸出如下 -

Original Array:
[0 1 2 3 4 5 6 7 8 9]

Split into 3 unequal sub-arrays:
[0 1 2 3]
[4 5 6]
[7 8 9]

水平分割

我們可以使用 NumPy 中的 hsplit() 函式沿水平軸(即對於二維陣列,axis = 1)分割陣列。此函式沿水平方向將陣列分成子陣列,有效地分離資料列。以下是語法 -

numpy.hsplit(array, indices_or_sections)

其中,

  • array − 要分割的輸入陣列。

  • indices_or_sections − 指示如何分割陣列的整數或一維索引陣列。

示例

在此示例中,我們使用 numpy.hsplit() 函式沿其列將二維陣列“arr”分割成 2 個相等的部分 -

import numpy as np

# 2D array
arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8]])

# Split into 2 equal parts along axis 1
split_arr = np.hsplit(arr, 2)

print("Original Array:")
print(arr)
print("\nSplit into 2 equal parts along axis 1:")
for sub_arr in split_arr:
   print(sub_arr)

執行以上程式碼後,我們得到以下輸出 -

Original Array:[[1 2 3 4]
 [5 6 7 8]]

Split into 2 equal parts along axis 1:
[[1 2]
 [5 6]]
[[3 4]
 [7 8]]

垂直分割

我們也可以使用 NumPy 中的 vsplit() 函式沿垂直軸(即對於二維陣列,axis = 0)分割陣列。此函式沿垂直方向將陣列分成子陣列,有效地分離資料行。以下是語法 -

numpy.vsplit(array, indices_or_sections)

其中,

  • array − 要分割的輸入陣列。

  • indices_or_sections − 指示如何分割陣列的整數或一維索引陣列。

示例

在下面的示例中,我們使用 numpy.vsplit() 函式沿其行將二維陣列“arr”分割成 3 個相等的部分 -

import numpy as np

# 2D array
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# Split into 3 equal parts along axis 0
split_arr = np.vsplit(arr, 3)

print("Original Array:")
print(arr)
print("\nSplit into 3 equal parts along axis 0:")
for sub_arr in split_arr:
   print(sub_arr)

獲得的輸出如下所示 -

Original Array:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

Split into 3 equal parts along axis 0:
[[1 2 3]]
[[4 5 6]]
[[7 8 9]]

深度分割

numpy.dsplit() 函式用於沿其第三維分割三維陣列。此維度通常稱為深度維度,對應於 axis=2。以下是語法 -

numpy.dsplit(array, indices_or_sections)

示例

在此示例中,使用 numpy.dsplit() 函式沿其第三維將三維陣列“arr”分割成四個相等的部分 -

import numpy as np

# Example 3D array
arr = np.arange(24).reshape((2, 3, 4))

# Split into 4 equal parts along axis 2 (depth)
split_arr = np.dsplit(arr, 4)

print("Original Array:")
print(arr)
print("\nSplit into 4 equal parts along axis 2 (depth):")
for sub_arr in split_arr:
   print(sub_arr)
   print()

產生的結果如下 -

Original Array:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

Split into 4 equal parts along axis 2 (depth):
[[[ 0]
  [ 4]
  [ 8]]

 [[12]
  [16]
  [20]]]

[[[ 1]
  [ 5]
  [ 9]]

 [[13]
  [17]
  [21]]]

[[[ 2]
  [ 6]
  [10]]

 [[14]
  [18]
  [22]]]

[[[ 3]
  [ 7]
  [11]]

 [[15]
  [19]
  [23]]]
廣告