python教程,如何快速将ndarray扁平化处理?多维变一维?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
如何将多维的ndarray
快速扁平化处理,变成一维的呢?这就是本文要主要讨论的话题,共有两种方案可供选择。变成一维之后,就可以进一步变形或者进行处理了。
苏南大叔的“程序如此灵动”技术博客,本文讨论如果通过两种方案快速的将ndarray
类型数据扁平化处理。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@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()
测试代码
测试代码:
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
文章感兴趣,可以点击下面的链接查看:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。