一、引言

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

向量化和广播是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. 如何用VSCode调试Vue.js

    VS Code相关插件:Chinese (Simplified) Language Pack for Visual Studio Code Debugger for Chrome ESLint Vet ...

  2. [Swift]LeetCode20. 有效的括号 | Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  3. [Swift]LeetCode977. 有序数组的平方 | Squares of a Sorted Array

    Given an array of integers A sorted in non-decreasing order, return an array of the squares of each ...

  4. WebWorker与WebSocket实现前端消息总线

    Web Worker让JS有了多线程的能力,可以将复杂耗时的操作都交付给Worker线程处理.WebSocket让web端与服务端维持一个有效的长连接,实现服务端主动推送数据.将二者一结合,业务系统信 ...

  5. Jedis与Luttuce区别

    如果你在网上搜索Redis 的Java客户端,你会发现,大多数文献介绍的都是 Jedis. 不可否认,Jedis是一个优秀的基于Java语言的Redis客户端. 但是,其不足也很明显:Jedis在实现 ...

  6. Spring中你可能不知道的事(二)

    在上一节中,我介绍了Spring中极为重要的BeanPostProcessor BeanFactoryPostProcessor Import ImportSelector,还介绍了一些其他的零碎知识 ...

  7. Nginx学习系列一搭建环境

    1.Win10下安装vmware14虚拟机软件 官方下载地址 全程next,输入key,激活即可. 2.在虚拟机中安装Linux服务器环境,操作系统为Centos7 继续下一步,安装完成! 3.下载C ...

  8. 『ice 离散化广搜』

    ice(USACO) Description Bessie 在一个冰封的湖面上游泳,湖面可以表示为二维的平面,坐标范围是-1,000,000,000..1,000,000,000. 湖面上的N(1 & ...

  9. Android 9.0/P http 网络请求的问题

    Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...

  10. LeetCode专题-Python实现之第13题:Roman to Integer

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...