日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/10 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.np.flatten() 和 np.ravel()

兩者的功能是一致的,將多維數組降為一維,但是兩者的區別是返回拷貝還是返回視圖。

np.flatten()返回一份拷貝,對拷貝所做修改不會影響原始矩陣,而np.ravel()返回的是視圖,修改時會影響原始矩陣

使用時推薦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)# 二者的區別 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的區別

其在于輸入為數組時,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) # 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

但是其實如果是這么寫的話,兩者又是等價的:(因為改變了類型,所以都只能返回一個拷貝)

輸入: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

?

總結

以上是生活随笔為你收集整理的【Python学习】 - 关于函数返回拷贝还是返回视图的几组函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。