Python程式獲取扁平化的1D陣列


陣列是一種資料結構,用於儲存一組同構資料元素。它可以有多個維度。

一維陣列 -

[1 2 3 4 5 6]

二維陣列 -

[[1 2 3]
   [4 5 6]
   [7 8 9]]

扁平化陣列意味著降低多維陣列的維度。

在下面的文章中,我們將討論Python程式如何獲取扁平化的1D陣列。我們將使用列表和NumPy陣列來表示普通陣列,因為Python沒有原生的陣列資料結構。

輸入輸出場景

假設我們有一個二維陣列作為輸入,輸出將是扁平化的陣列。

Input array:  
[[1 2 3]
 [4 5 6]
 [7 8 9]]
Output:
Flattened array:  [1 2 3 4 5 6 7 8 9]

使用巢狀列表

我們可以使用Python的`functools`模組中的`reduce`函式來扁平化二維陣列。`reduce()`函式用於將指定函式應用於序列的各項,並返回一個簡化的序列。以下是使用方法:

reduce(function, iterable[, initializer])

其中,

  • function 是一個預定義的函式,應用於可迭代物件的各項。

  • Iterable 任何Python可迭代物件,例如:列表、元組、字串和字典。

要使用`reduce`函式,我們需要從`functools`模組匯入它。

示例

在這個例子中,我們將使用lambda和`reduce()`函式來獲取扁平化的1D陣列。

from functools import reduce 

arr_2d = [[1, 2, 3],
   [3, 6, 7],
   [7, 5, 4]]            
# print initial array
print("Original array: ", arr_2d)

# flattening the 2d array into 1d array
# using reduce function
flattened_arr = reduce(lambda x,y:x+y, arr_2d)

print("Flattened array: ", flattened_arr)

輸出

Original array:  [[1, 2, 3], [3, 6, 7], [7, 5, 4]]
Flattened array:  [1, 2, 3, 3, 6, 7, 7, 5, 4]

`reduce`函式在lambda函式的幫助下成功地扁平化了二維陣列。

示例

此外,我們也可以使用列表推導式來獲取扁平化的陣列。讓我們看看下面的例子。

arr_2d = [[1, 2, 3],
   [3, 6, 7],
   [7, 5, 4]]            

# print initial array
print("Original array: ", arr_2d)

# flattening the 2d array into 1d array
# using list comprehension
flattened_arr = [j for sub in arr_2d for j in sub]
print("Flattened array: ", flattened_arr)

輸出

Original array:  [[1, 2, 3], [3, 6, 7], [7, 5, 4]]
Flattened array:  [1, 2, 3, 3, 6, 7, 7, 5, 4]

藉助列表推導式,我們迭代了陣列及其子陣列元素,然後建立了儲存在`flattened_arr`變數中的扁平化陣列。

示例

在這個例子中,我們將使用`sum()`函式來獲取1D陣列。

arr_2d = [[1, 2, 3],
   [3, 6, 7],
   [7, 5, 4]]            

# print initial array
print("Original array: ", arr_2d)

# flattening the 2d array into 1d array
# using list sum function
flattened_arr = sum(arr_2d, [])

print("Flattened array: ", flattened_arr)

輸出

Original array:  [[1, 2, 3], [3, 6, 7], [7, 5, 4]]
Flattened array:  [1, 2, 3, 3, 6, 7, 7, 5, 4]

`sum(arr_2d, [])`扁平化二維陣列,這裡內建的`sum()`函式執行內部陣列的連線,類似於`[1, 2] + [3, 4]`。

注意 - 不推薦這種方法,因為它執行任務的時間更長。

使用numpy.flatten()函式

我們可以輕鬆地使用NumPy的`flatten()`函式來獲取扁平化的陣列。以下是該函式的語法:

ndarray.flatten(order='C')

該方法從輸入的N維陣列返回一個扁平化的陣列。這裡的引數`order`是一個可選引數,預設值為'C'。

示例

在這個例子中,我們將使用`flatten()`函式將二維NumPy陣列扁平化為一維陣列。

import numpy as np
arr_2d = np.array([[1, 2, 3],[4, 5, 6], [7, 8, 9]])
# print initial array
print("Original array: ", arr_2d)
# get the flattened array
flattened_arr = arr_2d.flatten()

print("Flattened array: ", flattened_arr)

輸出

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

這些是在Python程式設計中獲取扁平化1D陣列的幾種方法。

更新於:2023年5月29日

瀏覽量:124

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.