一、引言

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

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

二、对象副本和视图

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

副本:复制

视图:链接

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

In []: a = np.array([,,,,])

In []: a
Out[]: array([, , , , ]) In []: b = a In []: b
Out[]: array([, , , , ]) #修改b数组的第二个元素,a数组的第二个元素也随即改变
In []: b[] = In []: a
Out[]: array([, , , , ])

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

In []: c = a[:]

In []: c
Out[]: array([, ]) In []: c[] = In []: a
Out[]: array([, , , , ])

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

In []: a
Out[]: array([, , , , ]) In []: a = np.array([,,,]) In []: d = a.copy() In []: d
Out[]: array([, , , ]) In []: d[] =
#数组d元素的改变并不会影响数组a
In []: a
Out[]: array([, , , ])

三、向量化

有了向量化,编写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]]])

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

  1. NumPy 副本和视图

    NumPy 副本和视图 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数 ...

  2. NumPy副本和视图

    NumPy - 副本和视图 在执行函数时,其中一些返回输入数组的副本,而另一些返回视图. 当内容物理存储在另一个位置时,称为副本. 另一方面,如果提供了相同内存内容的不同视图,我们将其称为视图. 无复 ...

  3. 17、NumPy——副本和视图

    副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数据不会产生拷贝.如果我们 ...

  4. 吴裕雄--天生自然Numpy库学习笔记:NumPy 副本和视图

    副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数据不会产生拷贝.如果我们 ...

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

    一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 L ...

  6. 【PS技巧】常用概念和功能操作

    常用概念 1.画布大小与图像大小 画布大小是图像背景的大小,即画纸.图像大小是当前编辑的图层的所有对象大小,即画纸上的画. 常用功能操作 1.打开和新建功能 打开图片:Ctrl+O或双击工作区 图片垂 ...

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

    一.常用概念 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 线程 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干 ...

  8. Document-对象属性和常用的对象方法

    Document-对象属性和常用的对象方法 对象属性 document.title                           //设置文档标题等价于HTML的title标签 document ...

  9. .NET中制做对象的副本(一)

    .NET中对于复杂对象制作副本比较困难,闲暇之时写了这个方法,和大家分享. 本案例用于大型对象的副本制作,常见的应用场景就是树形对象节点的拷贝,但是也有局限性,目前使用于类里有基本类型(int sti ...

随机推荐

  1. [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP

    星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的优劣,是基于以下两点考虑去尝试用命令行编译安卓APP的: 了解安卓APP ...

  2. [Swift]LeetCode766. 托普利茨矩阵 | Toeplitz Matrix

    A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element. Now given ...

  3. [Swift]LeetCode865. 具有所有最深结点的最小子树 | Smallest Subtree with all the Deepest Nodes

    Given a binary tree rooted at root, the depth of each node is the shortest distance to the root. A n ...

  4. mybatis xml < >

    [参考文章]:mybatis 中的 xml 配置文件中 ‘<’. ‘>’ 处理 1.使用转义字符将 ‘<’. ‘>’ 替换掉 描述 字符 转义字符小于号 < <大于 ...

  5. Android版本号列表

    Android版本号列表

  6. Python内置函数(12)——compile

    英文文档: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the source i ...

  7. Java中的String,StringBuilder,StringBuffer三者的区别(转载)

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  8. Node.js与Sails~redis组件的使用

    有段时间没写关于NodeJs的文章了,今天也是为了解决高并发的问题,而想起了这个东西,IIS的站点在并发量达到200时有了一个瓶颈,于是想到了这个对高并发支持比较好的框架,nodeJs在我之前写出一些 ...

  9. PC逆向之代码还原技术,第三讲汇编中加法的代码还原

    目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加 ...

  10. [ Java面试题 ]并发篇

    1.Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构.CPU和操作系统间有确定性地行为.它在多线程的情况下尤其重要.Java内存模型对一个线程所做的变动能被其它线程可见 ...