当前位置:首页 >> 编程语言 >> 【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总,vip.qq.com

【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总,vip.qq.com

0evadmin 编程语言 1
文件名:【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总,vip.qq.com 【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总 1.np.flatten() 和 np.ravel()

两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷贝还是返回视图。

np.flatten()返回一份拷贝,对拷贝所做修改不会影响原始矩阵,而np.ravel()返回的是视图,修改时会影响原始矩阵

使用时推荐np.flatten()

输入:import numpy as npa = np.array([[1 , 2] , [3 , 4]])b = a.flatten()print('b:' , b)c = a.ravel()print('c:' , c)d = a.ravel('F')print('d:' , d)# 二者的区别b[0] = 10print('a:' , a)c[0] = 10print('a:' , a)输出:b: [1 2 3 4]c: [1 2 3 4]d: [1 3 2 4]a: [[1 2][3 4]]a: [[10 2][ 3 4]]

 

2.np.array()与np.asarray的区别

其在于输入为数组时,np.array是将重新创建一个数组空间并将数据复制进去,它有自己的一块内存区域,所以随着输入的改变np.array的输出不变(即返回拷贝);而np.asarray功能是将指向数组a的计数器加1,并指向该数组,这样当原始数组改变的时候,np.asarray的输出也会改变(相当于返回视图)。

推荐使用np.array()

输入:import numpy as npa=np.ones((3,3))b=np.array(a)c=np.asarray(a)a[1]=2print('a:\n',a)print('b:\n',b)print('c:\n',c)print(b is a) # Falseprint(c is a) # True输出:a:[[1. 1. 1.][2. 2. 2.][1. 1. 1.]]b:[[1. 1. 1.][1. 1. 1.][1. 1. 1.]]c:[[1. 1. 1.][2. 2. 2.][1. 1. 1.]]FalseTrue

但是其实如果是这么写的话,两者又是等价的:(因为改变了类型,所以都只能返回一个拷贝)

输入:a=np.ones((3,3))b=np.array(a,dtype = 'float32')c=np.asarray(a,dtype = 'float32')a[1]=2print('a:\n',a)print('b:\n',b)print('c:\n',c)print(b is a) # Falseprint(c is a) # True输出:a:[[1. 1. 1.][2. 2. 2.][1. 1. 1.]]b:[[1. 1. 1.][1. 1. 1.][1. 1. 1.]]c:[[1. 1. 1.][1. 1. 1.][1. 1. 1.]]FalseFalse

 

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接