一、引言

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

向量化和广播是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. PostgreSQL+PostGIS 的使用

    一.PostGIS中的几何类型 PostGIS支持所有OGC规范的“Simple Features”类型,同时在此基础上扩展了对3DZ.3DM.4D坐标的支持. 1. OGC的WKB和WKT格式 OG ...

  2. EF Oracle:错误 175

    错误 1 错误 175: 具有固定名称“Oracle.DataAccess.Client”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载.有关详细信息,请参阅内部异常. 安装 ...

  3. [Swift]LeetCode115. 不同的子序列 | Distinct Subsequences

    Given a string S and a string T, count the number of distinct subsequences of S which equals T. A su ...

  4. [Swift]LeetCode121. 买卖股票的最佳时机 I | Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  5. [Swift]LeetCode883. 三维形体投影面积 | Projection Area of 3D Shapes

    On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...

  6. [Swift]LeetCode902. 最大为 N 的数字组合 | Numbers At Most N Given Digit Set

    We have a sorted set of digits D, a non-empty subset of {'1','2','3','4','5','6','7','8','9'}.  (Not ...

  7. ThinkInJava之内部类

    一:内部类概述 将一个类的定义放在另一个类的内部,这就是内部类.内部类是Java一种非常有用的特征,因为他允许你把一些逻辑相关的数据组织在一起,并控制它的可见性. 二:内部类的创建 我们都知道类的创建 ...

  8. PyCharm2019 激活码

    因公司的需求,需要做一个爬取最近上映的电影.列车号.航班号.机场.车站等信息,所以需要我做一个爬虫项目,当然java也可以做爬虫,但是还是没有python这样方便,所以也开始学习Python啦!!! ...

  9. java代码之美(8)---guava字符串工具

    guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给 ...

  10. asp.net core系列 38 WebAPI 返回类型与响应格式--必备

    一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...