OpenCV Numpy skimage

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

2019-01-17  本文已影响20人  dopami

在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

上一篇下一篇

猜你喜欢

热点阅读