L8-Flatten拍平多維數組的元素

案例說明

分享一個拍平二維數組的案例。
有如下二維數組,包含兩個元素。現在需要輸出爲一維數組,能想到哪些方法呢?

# 二維數組
ar1 = [[1, 2, 3], [4, 5]]

1、最平凡:數組索引訪問

print(ar1[0]+ar1[1])
# [1, 2, 3, 4, 5]

2、最傷腦:二次遍歷-列表生成器

newlist = [i for j in range(len(ar1)) for i in ar1[j]]
print(newlist)

3、最靈巧:活用函數sum()

使用sum(), 將源數組和空的一維數組作爲參數傳入,最終得到的結果是一維數組。

newlist = sum(ar1, [])
print(newlist)

爲什麼sum()還可以這樣玩?

翻閱平凡的官方文檔對sum()的定義,發現裏邊有隱藏的點,只能深入理解和反覆實踐,纔可挖掘、領悟。

def sum(iterable: Iterable[_T], start: _S)

Return the sum of a ‘start’ value (default: 0) plus an iterable of
numbers

When the iterable is empty, return the start value. This function is
intended specifically for use with numeric values and may reject
non-numeric types.*

4、最省心:一步到位,Numpy.flatmap()

import numpy as np 
a = np.array([[1,2], [3,4]])
print(a.flatten())# 賦值操作時不會改變源數組 的值
print(a.flatten('F'))# 豎直方向
print(a.ravel())# 賦值操作時會改變源數組的值

注意, flatten()與 ravel()的區別

flatten():不會改變源數組
ravel():會改變源數組
看如下示例

a = np.array([[1,2], [3,4]])
a.flatten()[1]=11
'''
[[1 2]
 [3 4]]
'''
print(a)
a.ravel()[1]=10
print(a)
'''
發現源對象的值已被更改爲10 
[[ 1 10]
 [ 3  4]]
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章