首页 > 其他分享 >NumPy科学计算库学习_006_NumPy数组的复制和视图

NumPy科学计算库学习_006_NumPy数组的复制和视图

时间:2023-01-03 07:22:50浏览次数:45  
标签:00 视图 np 006 数组 print 拷贝 NumPy

引入模块

import numpy as np

什么是浅拷贝?

浅拷贝会在内存中产生不同对象,但由于拷贝的是父对象,子对象并没有拷贝,所以浅拷贝会存在共享内存的情况,实际上,NumPy的视图np_arr.view()是一种浅拷贝。

什么是深拷贝?

通过深拷贝np.copy()得到的变量互不干扰,其中一个变量改变时,不影响其他变量的值。

完全没有被复制

import numpy as np
a = np.random.randint(0,10,size=(2,3))
b = a
print("【a】\n",a)
print("【b】\n",b)
print("【a is b】\n",a is b,"(a和b是两个不同变量,但是对应相同的内存对象)")
b[0,0] = 1024
print("【修改b的一个元素】\n","a:",a,"\n","b:",b,"\n【结论】\n","NumPy数组中,将a赋值给b后,由于a、b指向的内存地址相同,修改b的值的时候a的值也会被修改。")
【a】
 [[6 8 9]
 [9 7 2]]
【b】
 [[6 8 9]
 [9 7 2]]
【a is b】
 True (a和b是两个不同变量,但是对应相同的内存地址对象)
【修改b的一个元素】
 a: [[1024    8    9]
 [   9    7    2]] 
 b: [[1024    8    9]
 [   9    7    2]] 
【结论】
 NumPy数组中,将a赋值给b后,由于a、b指向的内存地址相同,修改b的值的时候a的值也会被修改。

通过视图实现浅拷贝

a = np.random.randint(0,10,size=(2,3))
b = a.view() # a与b此时共享视图、叫浅拷贝
print("【a】\n",a)
print("【b】\n",b,"(使用a中的数据创建了一个新的数组对象)")
print("【a is b】\n",a is b)
print("【b.base is a】\n",b.base is a)
print("【a.flags.owndata】\n",a.flags.owndata)
print("【b.flags.owndata】\n",b.flags.owndata)
b[0,0]=1024
print("【修改b的一个元素】\n","a:",a,"\n","b:",b)
【a】
 [[0 0 1]
 [4 3 8]]
【b】
 [[0 0 1]
 [4 3 8]] (使用a中的数据创建了一个新的数组对象)
【a is b】
 False
【b.base is a】
 True
【a.flags.owndata】
 True
【b.flags.owndata】
 False
【修改b的一个元素】
 a: [[1024    0    1]
 [   4    3    8]] 
 b: [[1024    0    1]
 [   4    3    8]]

深拷贝

a = np.arange(1e8) # 这里[0~1e8]
print("【a】(这是一个超长数组)\n",a)
print("【长度】\n",a.size)
print("===【深拷贝的基本应用】===")
b_simple = a.copy()
print("【b_simple】\n",b_simple)
print("===【深拷贝的特殊应用】===")
b_save_memory = a[::10000000].copy()
del a # 删除占用大量内存的a数组
print("【b_save_memory】(从a中的每1千万中取一个数)\n",b_save_memory)
【a】(这是一个超长数组)
 [0.0000000e+00 1.0000000e+00 2.0000000e+00 ... 9.9999997e+07 9.9999998e+07
 9.9999999e+07]
【长度】
 100000000
===【深拷贝的基本应用】===
【b_simple】
 [0.0000000e+00 1.0000000e+00 2.0000000e+00 ... 9.9999997e+07 9.9999998e+07
 9.9999999e+07]
===【深拷贝的特殊应用】===
【b_save_memory】(从a中的每1千万中取一个数)
 [       0. 10000000. 20000000. 30000000. 40000000. 50000000. 60000000.
 70000000. 80000000. 90000000.]

标签:00,视图,np,006,数组,print,拷贝,NumPy
From: https://www.cnblogs.com/cloucodeforfun/p/16683522.html

相关文章

  • NumPy科学计算库学习_007_NumPy数组的基本索引和切片
    导入模块importnumpyasnp一维数组切片创建一个NumPy数组arr=np.array([0,1,2,3,4,5,6,7,8,9])print("【arr】\n",arr)【arr】[0123456789]从Num......
  • NumPy科学计算库学习_003_NumPy数组的IO操作
    导入模块importnumpyasnp生成一个数组arr_io_1=np.random.randint(0,10,(2,3))arr_io_2=np.random.randint(0,10,3)print("【arr_io_1】\n",arr_io_1)print(......
  • NumPy科学计算库学习_004_关于NumPy的数据类型
    NumPy的数据类型int类型:int8、int16、int32、int64float类型:float16、float32、float64str类型创建array时,指定数据类型np.array()importnumpyasnpnp.array(......
  • NumPy科学计算库学习_002_查看NumPy数组的信息
    引入模块importnumpyasnp添加NumPy库并生成一个NumPy数组arr=np.random.randint(0,100,size=(2,3,4))print("【arr】\n",arr)【arr】[[[12646556][21......
  • NumPy科学计算库学习_001_创建NumPy数组的各种方法
    引入模块importnumpyasnp创建元素全部是0/1的NumPy数组代码结构np.zeros(shape=n)np.ones(shape=n)案例zeros_np_arr_1_dim=np.zeros(shape=13)zeros_np_ar......
  • django的通用视图
    django.views.geneic:django.视图.通用的有时候编写视图是一种很繁重的任务,在django.views中存在的generic 刚好可以解决这个问题。减少工作量,主要的是List 1.首先......
  • vue2修改数组/对象的值后,页面视图不更新的解决方法
    1.对象刷新:通过使用vue.$set方法,实现动态添加/修改对象属性语法:vue.$set(对象名,键名,值)Vue.$set(this.postForm,'set_last_buyday','属性值')//第一种写法用vue.$sett......
  • 收藏&下载 | 最全的NumPy 教程,没有之一
    译者:飞龙   https://www.tutorialspoint.com/numpy/index.htm友情提示:本文较长,是教程的一部分,值得收藏,文末提供下载方式哦!觉得内容精彩一定要点一下“好看”哦!NumPy-......
  • NumPy 图解入门
    最近真是很忙,python的学习都搁置了好久了,​​NumPy​​​和​​Pandas​​一直都在入门过程中。总不能一直这样,赶紧抽时间往前推进,也记录一下笔记。整理学习内容是巩固和......
  • Django视图层
    目录Django视图层一、视图层之必会三板斧二、JsonResponse对象三、request对象四、视图层之FBV与CBV五、CBV源码剖析六、虚拟环境Django视图层一、视图层之必会三板斧用......