Numpy常用概念-对象的副本和视图、向量化、广播机制

一、引言

在我们操作数组的时候,返回的是新数组还是原数组的链接,我们就需要了解对象副本和视图的区别。

向量化和广播是numpy内部实现的基础。

二、对象副本和视图

我们应该注意到,在操作数组的时候返回的不是视图就是副本。

副本:复制

视图:链接

1.所有的赋值运算不会为此创建副本。把数组a赋值给了数组b,实际上不是为数组a创建副本,b只是调用a的另一种方式。实际上,修改了b数组的第二个元素,a数组的第二个数组也随之被改变。

In [1]: a = np.array([1,2,3,4,5])

In [2]: a
Out[2]: array([1, 2, 3, 4, 5])

In [3]: b = a

In [4]: b
Out[4]: array([1, 2, 3, 4, 5])

#修改b数组的第二个元素,a数组的第二个元素也随即改变
In [5]: b[1] = 6

In [6]: a
Out[6]: array([1, 6, 3, 4, 5])

2.切片操作得到的结果也是指向相同的对象。

In [9]: c = a[0:2]

In [10]: c
Out[10]: array([1, 6])

In [11]: c[0] = 5

In [12]: a
Out[12]: array([5, 6, 3, 4, 5])

3.为数组创建副本,使用copy()

In [12]: a
Out[12]: array([5, 6, 3, 4, 5])

In [13]: a = np.array([1,2,3,4])

In [14]: d = a.copy()

In [15]: d
Out[15]: array([1, 2, 3, 4])

In [16]: d[0] = 5
#数组d元素的改变并不会影响数组a
In [17]: a
Out[17]: array([1, 2, 3, 4])

三、向量化

有了向量化,编写code时无需使用循环,因为他在内部已经实现了。向量化使得代码更简洁,可读性更强。

数组相乘可以:a * b  而不需要for遍历数组相乘。

四、广播机制

1、广播机制实现了对两个或以上数组的运算或函数处理,即使这些数组的形状或长短不完全相同。

2、广播机制条件(满足其一即可):1.两个数组的每一维等长 2.其中一个数组为一维数组

3、广播机制有两条规则:

  1)为确实的维度补上个1.如果这时满足了兼容性条件,就可以使用广播机制了。

  2)扩展最小数组,使得它与最大的数组大小相同,以便使用元素级的函数或运算符。

In [17]: a = np.array([1,2,3])
Out[17]: array([1, 2, 3,])

In [18]: b = np.arange(0,9).reshape(3,3)

In [19]: b
Out[19]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

#假定为数组a用已有的值进行了填充
#array([[1, 2, 3,],
#          [1, 2, 3,],
#          [1, 2, 3,]])
In [20]: a+b
Out[20]:
array([[1, 3, 5],
       [4, 6, 8],
       [7, 9, 11]])

假定(一维数组)使用了原有的值填充,使得与另一个数组维度相同,他们的值就可以相加了。

即使更复杂的数组,两个数组形状不同、维度不同、互有长短。也仍然相互兼容,因此广播规则仍然适用。

In [21]: m = np.arange(6).reshape(3,1,2)

In [22]: n = np.arange(6).reshape(3,2,1)

In [23]: m
Out[23]:
array([[[0, 1]],

       [[2, 3]],

       [[4, 5]]])

In [24]: n
Out[24]:
array([[[0],
        [1]],

       [[2],
        [3]],

       [[4],
        [5]]])

In [26]: m + n
Out[26]:
array([[[ 0,  1],
        [ 1,  2]],

       [[ 4,  5],
        [ 5,  6]],

       [[ 8,  9],
        [ 9, 10]]])
时间: 2024-10-10 08:57:05

Numpy常用概念-对象的副本和视图、向量化、广播机制的相关文章

Oracle事务和常用数据对象

防伪码:一寸光阴一寸金 前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务.索引.视图等.那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化. 一.事务 1.简介 事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败.DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突. 1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存所有的更改的数据. 2)显示回滚

oracle系列(四)oracle事务和常用数据库对象

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务.索引.视图等.那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化. 一.事务 1.简介 事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败.DBMS通过事务的管理来协调用

007-elasticsearch【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念

一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目标是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API. 然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎. 它可以被下面这样准确的形容: 一个分布式的实时文档存储

Python--多线程、多进程常用概念

一.常用概念 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 线程 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能. 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID.程序计数器.寄存器集合和堆栈共同组成.线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能.线程没有自己的系统资源. 线程切换的开销远远小于进程切换的开销 切

Numpy常用数据结构、数据清洗函数、数据结构series和方法、数据结构dataframe和方法

Numpy常用数据结构 1. 数组创建 In [ ]: # 导入库 import numpy as np In [ ]: arr1 = np.array([-9,7,4,3]) In [ ]: arr1 In [ ]: arr2 = np.array([-9,7,4,3],dtype =float)# 尝试改变为int或者str In [ ]: print(arr2) In [ ]: arr3 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) In [

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

c++实现游戏开发中常用的对象池(含源码)

c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传 对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前使用量 5.最大使用量 http://download.csdn.net/download/little_stupid_child/9730912

Auto入门 之 常用概念

1.SEMI (Semiconductor Equipment And Materials International)  国际半导体设备与材料产业协会 2.SECS SECS协议是基于RS-232或TCP/IP的点对点协议,由SECS I/HSMS.SECS II两层及GEM构成   SECS I/HSMS 为传输层,SECS II则把SECS I传输的二进制串翻译成形象直观的格式表示出来,SECS II规范传输资料的标准结构和显示内容,方便使用者查看数据内容. 3.GEM (Generic

javascript常用的对象

<!DOCTYPE html> <html> <head> <title>javascript常用的对象</title> <meta charset="UTF-8"> <script type="text/javascript"> //日期对象 var date = new Date(); document.write(date.getFullYear()+"年"