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

由于目光再次回到了“数组扁平化/多维变一维”这个话题上,苏南大叔也写一下自己的最新感受和总结。不过本文的主体内容,想要先和奇葩的sklearn.utils.column_or_1d(a)撇清关系,本文不讨论这个奇葩的只能扁平化部分数组的函数。只讨论以下三个函数.flatten().ravel().resharp()

苏南大叔:再次审视ndarray扁平化相关函数,多维变一维函数区别 - 扁平化相关函数多维变一维
再次审视ndarray扁平化相关函数,多维变一维函数区别(图1-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10python@3.12.0,numpy@1.26.1,scikit-learn@1.2.2

前文回顾

苏南大叔描述过对ndarray类型的扁平化处理方式,以及对list类型的扁平化处理方式。参考文章:

本文就是基于这两篇文章进行讨论的。

差异点一

经过反反复复的经验总结,苏南大叔可以得出的经验值是:很多【并不是全部】numpy的函数,都有两个使用方式。一个是定义在numpy上,另外一个定义在ndarray类型的变量上。

然而,对于数组扁平化这件事情来说,上文的经验总结的几个函数来说,却存在着主体差异。

函数方法定义在numpy库上定义在ndarray数据类型上
.flatten()np.不存在ndarray_.存在
.ravel()np.存在ndarray_.存在
.resharp()np.存在ndarray_.存在

差异点二

因为这里是以“多维变一维”的相关函数为主要叙述目标的。所以,重点对比下面的三个函数.ravel().flatten().resharp()。主要对比的点是函数返回值。

.flatten()的返回值是个副本,和原版的被操作变量无关。

import numpy as np
x = np.array([["苏","南"], ["大","叔"]])
x.flatten()[3] = "哥"
print(x)
'''
[['苏' '南']
 ['大' '叔']]
'''

.ravel()的返回值是个引用,和原版的被操作变量就是同一个变量。

import numpy as np
x = np.array([["苏","南"], ["大","叔"]])
x.ravel()[3] = "哥"
print(x)
'''
[['苏' '南']
 ['大' '哥']]
'''
x = np.array([["苏","南"], ["大","叔"]])
np.ravel(x)[3] = "哥"
print(x)
'''
[['苏' '南']
 ['大' '哥']]
'''

.reshape()的返回值也是个引用,和原版的被操作变量就是同一个变量。

import numpy as np
x = np.array([["苏","南"], ["大","叔"]])
x.reshape(-1)[3]="哥"
print(x)
'''
[['苏' '南']
 ['大' '哥']]
'''
x = np.array([["苏","南"], ["大","叔"]])
np.reshape(x,-1)[3]="哥"
print(x)
'''
[['苏' '南']
 ['大' '哥']]
'''
函数方法返回值
.flatten()副本
.ravel()引用
.resharp()引用

差异点三

对于np.,可以操作的对象可以是ndarray,也可以是list/tuple等类数组类型。而ndarray_.则必然只可操作ndarray,在list类型后面试图做类似操作的话,会直接报错无此方法。

list类型总是可以关联上tuple类型,两者大多数情况下共进退。但是关联到set类型时,往往会出错。
import numpy as np

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

b = np.ravel(a).tolist()              # ['苏' '南' '大' '叔' '技' '术' '博' '客']
c = np.reshape(a,-1).tolist()         # ['苏' '南' '大' '叔' '技' '术' '博' '客'] 
print(b,c)

相关文章

结语

更多苏南大叔的python相关经验文章,请点击下面的链接:

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

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

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

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