美文网首页OpenCV Numpy skimage
Python numpy 数组操作中“拷贝与引用”

Python numpy 数组操作中“拷贝与引用”

作者: dopami | 来源:发表于2019-01-17 10:35 被阅读20次

    在C中操作有拷贝和引用两种,形如下:

    int adder0(int a, int b)

    {

        a += 1;

        b += 1;    

        return a+b;

    }

    int adder1(int* a, int* b)

    {

        *a += 1;

        *b += 1;    

    return *a + *b;

    }

    int main()

    {

    int a = 0, b=2;

    int sum0 = adder0(a,b);

    int sum1 = adder1(&a,&b);

    return 0;

    }

    adder0(a,b)就是拷贝a和b, 所以在执行完这一句的时候,主函数main中a b的值并不改变,改变的仅是调用函数中a b的副本

    adder1(a,b)是引用操作,在执行的过程中,直接操作的是a b地址中所存的数a  b,所以执行这句,main中a b均被加1.

    #而在Python中 numpy操作是,同样也存在拷贝和引用操作的区别

    import numpy as np

    #假如定义了 

    arr1 = np.random.random((5,5,5,3)) #这样一个数组

    arr2 = arr1[0:3,0:3]  #arr2的shape为(3,3,5,3), arr2是arr1的子数组

    #当这样操作时: 

    arr2 += 2   # arr2实际是arr1的引用,当改变arr2时,arr1对应的位置也会改变。

    #当期望从arr1中取一部分数出来进行运算,而不改变arr1中原来的值,

    #可使用如下语句:

    arr2 = np.copy( arr1[0:3,0:3])

    #这样arr2中就是arr1的一部分拷贝,操作arr2不会改变arr1

    相关文章

      网友评论

        本文标题:Python numpy 数组操作中“拷贝与引用”

        本文链接:https://www.haomeiwen.com/subject/lyimdqtx.html