【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总
生活随笔
收集整理的這篇文章主要介紹了
【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.np.flatten() 和 np.ravel()
兩者的功能是一致的,將多維數(shù)組降為一維,但是兩者的區(qū)別是返回拷貝還是返回視圖。
np.flatten()返回一份拷貝,對(duì)拷貝所做修改不會(huì)影響原始矩陣,而np.ravel()返回的是視圖,修改時(shí)會(huì)影響原始矩陣
使用時(shí)推薦np.flatten()
輸入:import numpy as np a = 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)# 二者的區(qū)別 b[0] = 10 print('a:' , a) c[0] = 10 print('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的區(qū)別
其在于輸入為數(shù)組時(shí),np.array是將重新創(chuàng)建一個(gè)數(shù)組空間并將數(shù)據(jù)復(fù)制進(jìn)去,它有自己的一塊內(nèi)存區(qū)域,所以隨著輸入的改變np.array的輸出不變(即返回拷貝);而np.asarray功能是將指向數(shù)組a的計(jì)數(shù)器加1,并指向該數(shù)組,這樣當(dāng)原始數(shù)組改變的時(shí)候,np.asarray的輸出也會(huì)改變(相當(dāng)于返回視圖)。
推薦使用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) # False print(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.]] False True但是其實(shí)如果是這么寫的話,兩者又是等價(jià)的:(因?yàn)楦淖兞祟愋?#xff0c;所以都只能返回一個(gè)拷貝)
輸入: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) # False print(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.]] False False?
總結(jié)
以上是生活随笔為你收集整理的【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招行信用卡循环利息是什么 招行信用卡循环
- 下一篇: 【基于Python】 - 人工智能机器学