NumPy 复制与视图

来源:互联网 发布:实验室洗眼器 淘宝 编辑:程序博客网 时间:2024/05/29 18:25

原文地址:http://blog.csdn.net/lsjseu/article/details/20359201

在原文基础上适当精简并更正少量原作者的笔误:

 

复制和视图

1. 完全不拷贝

简单的赋值不拷贝数组对象或它们的数据。

>>> a = arange(12)>>> b = a            # no new object is created>>> b isa          # a and b are twonames for the same ndarray objectTrue>>> b.shape =3,4    # changes the shape of a>>> a.shape(3, 4)

2.  Python 传递不定对象作为参考,所以函数调用不拷贝数组。

>>> def f(x):...     print id(x)...>>>id(a)                           # id is aunique identifier of an object148293216>>> f(a)148293216

3.视图(view)和浅复制

不同的数组对象分享同一个数据。视图方法创造一个新的数组对象指向同一数据。

>>> c = a.view()>>> c is aFalse>>> c.baseis a                       # c is a view ofthe data owned by aTrue>>> c.flags.owndataFalse>>>c.shape = 2,6                     # a's shape doesn'tchange>>> a.shape(3, 4)>>> c[0,4]= 1234                      # a's datachanges>>> aarray([[   0,   1,    2,    3],       [1234,   5,    6,    7],       [  8,    9,   10,  11]])

4.  切片数组返回原数组的一个视图:

>>> s = a[: , 1:3]    # spaces added forclarity; could also be written "s = a[:,1:3]">>> s[:] =10          # s[:] is a view ofs. Note the difference between s=10 and s[:]=10>>> aarray([[   0,  10,   10,    3],       [1234,  10,   10,    7],       [   8,   10,   10,  11]])

5.  深复制:

这个复制方法完全复制数组和它的数据

>>> d =a.copy()                         # a new arrayobject with new data is created>>> d is aFalse>>> d.baseis a                          # d doesn't shareanything with aFalse>>> d[0,0] = 9999>>> aarray([[   0,  10,   10,    3],       [1234,  10,   10,    7],       [  8,   10,   10,  11]])

0 0
原创粉丝点击