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]]
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章