当前位置: 首页 > news >正文

六、numpy拷贝

1、赋值

简单的赋值不会创建数组对象的副本。相反,它使用原始数组的相同id()来访问它。id()返回Python对象的通用标识符,类似于C中的指针

一个数组的任何变化都反映在另一个数组上。例如,一个数组的形状改变也会改变另一个数组的形状

x = np.random.randint(1, 10, 6)
print(x)
print(id(x))
y = x
print(y)
print(id(y))
y.shape = (2, 3)
print(x)  # 改变y后,x为指针指向相同的位置,所以改变。

[5 6 4 4 1 1]
1387205151408
[5 6 4 4 1 1]
1387205151408
[[5 6 4]
[4 1 1]]

2、视图

又可称为浅拷贝,是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。对视图进行修改,它会影响到原始数据,物理内存在同一位置

发生情况:

numpy的切片操作返回原数据的视图,修改数据会影响到原始数组

可以改变数组,但不可以改变形状

实现方式:

  1. 使用切片

  2. 使用view()函数

x = np.random.randint(0, 100, 6)
y = x[2:]
print(x)
print(id(x))
print(y)
print(id(y))
y[2] = 15
print(x)
print(id(x))
print(y)
print(id(y))

[10 73 98 21 74 56]
2954491054768
[98 21 74 56]
2953950081552
[10 73 98 21 15 56]
2954491054768
[98 21 15 56]
2953950081552

3、副本

又可称为深拷贝,是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据物理内存不在统一位置

发生情况:

调用ndarray的copy()函数产生一个副本

作用:创建一个副本

说明:对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一个位置

x = np.random.randint(0, 100, 6)
y = x.copy()
print(x)
print(id(x))
print(y)
print(id(y))
y[0] = 155
print(x)
print(y)

[94 76 36 88 57 2]
2288100887120
[94 76 36 88 57 2]
2287560045072
[94 76 36 88 57 2]
[155 76 36 88 57 2]

python序列的切片操作,调用deepCopy()函数

1、IO操作

numpy可以读写磁盘上的文本数据或二进制数据

numpy为ndarray对象引入了一个简单的文件格式:npy

npy文件用于存储重建ndarray所需的数据、图形、dtype和其他信息

常用IO函数作用
load()和save()是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中
savez()用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中
loadtxt()和savetxt()处理正常的文本文件(.txt等)
numpy.save()

原型:numpy.save(file,arr,allow_pickle=True,fix_imports=True)

作用:将数组保存到以 .npy为扩展名的文件中

参数说明
file要保存的文件,扩展名为.npy,如果文件路径末尾没有扩展名.npy,该扩展名会被自动加上
arr要保存的数组
allow_pickle可选,布尔值,允许使用Python pickies保存对象数组,Python中的pickle用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列话和反序列化
fix_imports可选,为了方便Python2中读取Python3保存的数据
numpy.savez()

原型:numpy.savez(file,*args,**kwds)

作用:将多个数组保存到以npz为扩展名的文件中

参数说明
file要保存的文件,扩展名为.npz,如果文件路径末尾没有扩展名.npz,该扩展名会被自动加上
args要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0,arr_1,…
kwds要保存的数组使用关键字名称
x = np.random.randint(1, 100, 3)
y = np.random.randint(1, 100, 3)
z = np.random.randint(1, 100, 3)
print(x)
print(y)
print(z)
np.savez("outfile.npz", x, y, arr_zh=z)
ret = np.load("./outfile.npz")
print(ret)
print(ret["arr_0"])
print(ret["arr_zh"])

[32 69 41]
[67 71 16]
[36 15 23]
<numpy.lib.npyio.NpzFile object at 0x00000229CD7DA6E0>
[32 69 41]
[36 15 23]

numpy.savetxt()

原型:
numpy.savetxt(FILENAME,a,fmt=“%d”,delimiter=“,”)

numpy.loadtxt(FILENAME,dtype=int,delimiter=’ ')

作用:以简单的文本文件格式存储数据,对应的使用loadtxt()函数来获取“数据”

参数说明
delimiter指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等
x = np.random.randint(1, 100, 3)
x = np.array(x, dtype=float)
x[0] = 2.5
print(x)
np.savetxt("outfile.txt", x)
ret = np.loadtxt("./outfile.txt")
print(ret)

[ 2.5 84. 39. ]
[ 2.5 84. 39. ]

相关文章:

  • STM32+python产生三角波
  • 【计算机网络(考研版)】第一站:计算机网络概述(一)
  • C++空间命名
  • 树,堆,二叉树的认识
  • 计算机存储系统
  • 返回值的理解
  • 前同事居然因为 Pycharm 的这个功能,即使离职三年也依然经常被请去喝茶~
  • IPV4地址详解
  • ubuntu 22.04学习笔记
  • 【蓝桥杯-筑基篇】基础数学思维与技巧(1)
  • 图论(入门版)
  • 使用bindgen将C语言头文件转换为Rust接口代码
  • 第九层(2):STL之string类
  • Allegro如何自动做差分对内等长操作指导
  • 搜索引擎位置跟踪应用SerpBear
  • [deviceone开发]-do_Webview的基本示例
  • HomeBrew常规使用教程
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS 面试题总结
  • October CMS - 快速入门 9 Images And Galleries
  • react-native 安卓真机环境搭建
  • React-redux的原理以及使用
  • VuePress 静态网站生成
  • 从0到1:PostCSS 插件开发最佳实践
  • 缓存与缓冲
  • 驱动程序原理
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 什么软件可以剪辑音乐?
  • 什么是Javascript函数节流?
  • 使用SAX解析XML
  • 通过npm或yarn自动生成vue组件
  • 我与Jetbrains的这些年
  • 一个项目push到多个远程Git仓库
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 主流的CSS水平和垂直居中技术大全
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 关于Android全面屏虚拟导航栏的适配总结
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)springcloud实战之config配置中心
  • (二)WCF的Binding模型
  • (分布式缓存)Redis哨兵
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (三)Honghu Cloud云架构一定时调度平台
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • . Flume面试题
  • .htaccess配置重写url引擎