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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NumPy快速入门--复制/视图/深拷贝

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NumPy快速入门--复制/视图/深拷贝 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 完全不復制
    • 2. 視圖或淺復制
    • 3. 深拷貝

當計算和操作數組時,它們的數據有時被復制到新的數組中,有時不復制。對于初學者來說,這經常是一個混亂的來源。有三種情況:

1. 完全不復制

  • 簡單賦值不會創建新的副本。
>>> a = np.arange(12) >>> b = a >>> b is a True >>> b.shape (12,) >>> b.shape = 3,4 >>> a.shape (3, 4) >>> id(a) #a、b的 id 號一樣,沒有創建新的數據 2432625948272 >>> id(b) 2432625948272
  • Python將可變對象作為引用傳遞,所以函數調用不會復制。
>>> def f(x):print(id(x))>>> id(a) 2432625948272 >>> f(a) # 傳入函數的對象a的id打印出來和之前一樣,沒有新對象產生 2432625948272

2. 視圖或淺復制

  • 不同的數組對象可以共享相同的數據。 view 方法創建一個新的數組對象,它查看相同的數據。
>>> c = a.view() >>> c is a False >>> c.base is a True >>> c.flags.owndata # 返回 False,c 并不保管數據 False >>> a.flags.owndata # 返回 True,數據由 a 保管 True >>> c.shape (3, 4) >>> a.shape (3, 4) >>> c.shape = 2,6 # 形狀不會同步 >>> c[0,4] = 1234 # 共享數據,a的也會變,數據同步 >>> c array([[ 0, 1, 2, 3, 1234, 5],[ 6, 7, 8, 9, 10, 11]]) >>> a array([[ 0, 1, 2, 3],[1234, 5, 6, 7], # 1234也在里面[ 8, 9, 10, 11]])
  • 對數組切片返回一個視圖view
>>> s = a[:,1:3] # s是a的切片,是a的一個view >>> s array([[ 1, 2],[ 5, 6],[ 9, 10]]) >>> s[:] = 999 # s 全部改數據 >>> s array([[999, 999],[999, 999],[999, 999]]) >>> a # a中的s切片部分數據都被改了 array([[ 0, 999, 999, 3],[1234, 999, 999, 7],[ 8, 999, 999, 11]])

3. 深拷貝

參考鏈接

  • copy 方法生成數組及其數據的完整拷貝。
>>> a = np.arange(12).reshape(3,4) >>> a array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])>>> d = a.copy() # 新的對象 >>> d is a False >>> d.base is a # 與a沒有任何聯系 False >>> d[0,0] = 999 >>> d array([[999, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]) >>> a array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]])

總結

以上是生活随笔為你收集整理的NumPy快速入门--复制/视图/深拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。

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