我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

如何将多维的ndarray快速扁平化处理,变成一维的呢?这就是本文要主要讨论的话题,共有两种方案可供选择。变成一维之后,就可以进一步变形或者进行处理了。

苏南大叔:python教程,如何快速将ndarray扁平化处理?多维变一维? - ndarray扁平化处理
python教程,如何快速将ndarray扁平化处理?多维变一维?(图2-1)

苏南大叔的“程序如此灵动”技术博客,本文讨论如果通过两种方案快速的将ndarray类型数据扁平化处理。测试环境:win10python@3.11.0numpy@1.24.2pandas@1.5.3。目标就是扁平化处理,实际上就是把维度变成一维的。

方案一:np.ravel()【官方推荐】

这个是numpy提供的功能,并不是定义在ndarray上面的。核心代码:

import numpy as np
np.ravel(ndarray_)

方案二:ndarray.ravel()

ndarray_.ravel()

方案三:ndarray.reshape()【推荐】

这个方案在以前的文章里面有个讨论,任何维度的ndarray都可以通过.reshape()进行重塑处理。当重塑的目标形状是一维的时候,就符合本文的需求了,ndarray扁平化!

具体来说,有两种调用方式,区别就在于参数传递什么。

ndarray_.reshape(-1)

或者:

ndarray_.reshape(ndarray_.size)

参考文章:https://newsn.net/say/ndarray-reshape.html

方案四:np.reshape()【官方推荐】

这个是numpy提供的功能,并不是定义在ndarray上面的。核心代码:

import numpy as np
np.reshape(ndarray_,-1)
np.reshape(ndarray_,ndarray_.size)

方案五:ndarray.flatten()【官方推荐】

其实官方推荐的是这个.flatten()函数来实现这个需求,但是这个函数的问题在于单词不好记是不?不如.reshape(-1)好记。

ndarray_.flatten()

测试代码

苏南大叔:python教程,如何快速将ndarray扁平化处理?多维变一维? - 扁平化测试代码
python教程,如何快速将ndarray扁平化处理?多维变一维?(图2-2)

测试代码:

import numpy as np
a = np.array([list("苏南大叔"), list("技术博客")])

b = np.ravel(a)
# b2 = np.flatten(a)         # AttributeError: module 'numpy' has no attribute 'flatten'
c = a.ravel()
d = a.flatten()
e = a.reshape(-1)
f = a.reshape(a.size)
g = np.reshape(a,-1)
h = np.reshape(a,a.size)

f1 = np.array_equal(b, c)
f2 = np.array_equal(c, d)
f3 = np.array_equal(d, e)
f4 = np.array_equal(e, f)
f5 = np.array_equal(g, h)

输出:

[['苏' '南' '大' '叔']
 ['技' '术' '博' '客']]

['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']
['苏' '南' '大' '叔' '技' '术' '博' '客']

True
True
True
True
True

关于两个ndarray是否相等的经验文章,请参考:

提外话:order读取顺序【主动忽略】

本文提到的这些函数都有个order参数,默认为C。这里就不举例为其它的情况了。使用默认C就是对的,换成其它参数就会得到不可控的结果。待后续文章讨论。

总结

通篇文章都是python经验文章的总结,如果读者对于苏南大叔所有的python文章感兴趣,可以点击下面的链接查看:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python