【问题标题】:Definition and difference between a shared array view and a copy of array data?共享数组视图和数组数据副本的定义和区别?
【发布时间】:2014-02-21 23:24:57
【问题描述】:

我有一本书,上面写着:“重要的是要知道我们什么时候处理共享数组视图,什么时候我们有一个 数组数据的副本。”,但是这本书从未具体说明这两件事中的任何一个。

谁能给出一个非常简单的解释什么是共享数组视图,什么是数组数据的副本?和区别?有人可以用一个简单的比喻来解释这一点吗?谢谢!

【问题讨论】:

    标签: python arrays numpy scipy


    【解决方案1】:

    一种检查方法是使用numpy的may_share_memory

    In [11]: a = np.array([1, 2, 3])
    
    In [12]: b = a[0:2]
    
    In [13]: c = a.copy()
    
    In [14]: np.may_share_memory(a, b)
    Out[14]: True
    
    In [15]: np.may_share_memory(a, c)
    Out[15]: False
    
    In [16]: np.may_share_memory(b, c)
    Out[16]: False
    

    这很重要,因为分配给副本不会影响原始数组,而更改视图会:

    In [21]: b[1] = 7
    
    In [22]: a
    Out[22]: array([1, 7, 3])
    
    In [23]: c[1] = 11
    
    In [24]: a
    Out[24]: array([1, 7, 3])
    
    In [25]: c
    Out[25]: array([ 1, 11,  3])
    

    【讨论】:

      【解决方案2】:

      查看共享数组是指在内存中共享用于多处理的数组与拥有实际数组数据(例如pickle)的数组。

      Here 是一个链接,如果您有兴趣,可以进行更深入的对话。

      【讨论】:

      • 数组到底是什么?数组一定是图像吗?
      • @user3268003 - 数组只是数据的集合; intsfloatsLink
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2010-10-02
      相关资源
      最近更新 更多