Ndarray对象
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
ndarray对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。
ndarray内部由以下内容组成:
notion image
  • 一个指向数据(内存或内存映射文件中的一块数据)的指针
  • 数据类型或dtype,描述在数组中的固定大小值的格子
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中obj[::-1]obj[:,::-1]就是如此
数组索引和切片
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
ndarray对象的内容可以通过索引或切片来访问和修改,与Pythonlist的切片操作一样。
NumPy比一般的Python序列提供更多的索引方式。除了之前的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引

简单索引和切片

ndarray数组可以基于0 - n的下标进行索引,切片对象可以通过内置的slice函数,并设置start, stopstep参数进行,从原数组中切割出一个新数组:
 
也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:
数组的广播机制
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

数组与数的计算

Python列表中,想要对列表中所有的元素都加一个数,要么采用map函数,要么循环整个列表进行操作。但是NumPy中的数组可以直接在数组上进行操作:
 
 

数组与数组的计算

结构相同的数组之间的运算

 
迭代数组
type
status
date
slug
summary
tags
category
icon
password
Property
page icon

 
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
使用 arange() 函数创建一个 2X3 数组,并使用nditer对它进行迭代
以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)。
 
这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比:
数组操作
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 

修改数组形状

Reshape和Resize

两个方法都是用来修改数组形状的,但是有一些不同:
reshape是将数组转换成指定的形状,然后返回转换后的结果,对于原数组的形状是不会发生改变的
  • arr:要修改形状的数组
  • newshape:整数或者整数数组,新的形状应当兼容原有形状
拷贝
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
在数组操作中分成三种拷贝:
  1. 不拷贝:直接赋值,那么栈区没有拷贝,只是用同一个栈区定义了不同的名称
  1. 浅拷贝:只拷贝栈区,栈区指定的堆区并没有拷贝,View(视图)
  1. 深拷贝:栈区和堆区都拷贝了,将之前数据完完整整的拷贝一份放到另外一块内存空间中,这样就是两个完全不同的值了
 
视图一般发生在:
  • numpy 的切片操作返回原数据的视图
  • 调用 ndarray 的 view() 函数产生一个视图
副本一般发生在:
  • Python 序列的切片操作,调用deepCopy()函数。
IO函数
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 

文件保存

有时候有了一个数组,需要保存到文件中,那么可以使用np.savetxt来实现:
 

读取文件

有时候数据是需要从文件中读取出来的,那么可以使用np.loadtxt来实现:
NAN和INF
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
 
  1. NANNot A number,不是一个数字的意思,但是他是属于浮点类型的,所以想要进行数据操作的时候需要注意他的类型。
  1. INFInfinity,代表的是无穷大的意思,也是属于浮点类型。np.inf表示正无穷大,-np.inf表示负无穷大,一般在出现除数为0的时候为无穷大。比如2/0
 

NAN一些特点

  1. NAN和NAN不相等,比如np.NAN != np.NAN这个条件是成立的
  1. NAN和任何值做运算,结果都是NAN
random模块
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
 
notion image

np.random.seed

用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。一般没有特殊要求不用设置。以下代码:

np.random.rand

生成一个值为[0,1)之间的数组,形状由参数指定,如果没有参数,那么将返回一个随机值:
axis理解
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
 
简单来说, 最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加1。什么意思呢?下面再来解释一下
notion image
最外面的括号就是axis=0,里面两个子括号axis=1。 操作方式:如果指定轴进行相关的操作,那么他会使用轴下的每个直接子元素的第0个,第1个,第2个...分别进行相关的操作
现在我们用刚刚理解的方式来做几个操作。比如现在有一个二维的数组
求x数组在axis=0和axis=1两种情况下的和:
为什么得到的是[2,4]呢,原因是按照axis=0的方式进行相加,那么就会把最外面轴下的所有直接子元素中的第0个位置进行相加,第1个位置进行相加...依此类推,得到的就是0+2以及2+3,然后进行相加,得到的结果就是[2,4]
按照axis=1的方式进行相加,那么就会把轴为1里面的元素拿出来进行求和,得到的就是0,1,进行相加为1,以及2,3进行相加为5,所以最终结果就是[1,5]
 
常用函数
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

一元函数

二元函数

聚合函数

使用np.sum或者是a.sum即可实现。并且在使用的时候,可以指定具体哪个轴。同样Python中也内置了sum函数,但是Python内置的sum函数执行效率没有np.sum那么高,可以通过以下代码测试了解到:
 
字节交换
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
在几乎所有的机器上,多字节对象都被存储为连续的字节序列。字节顺序,是跨越多字节的程序对象的存储规则。
  • 大端模式:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
  • 小端模式:指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
例如在 C 语言中,一个类型为 int 的变量 x 地址为 0x100,那么其对应地址表达式&x的值为 0x100。且x的四个字节将被存储在存储器的 0x100, 0x101, 0x102, 0x103位置。
notion image
 
numpy.ndarray.byteswap()将 ndarray 中每个元素中的字节进行大小端转换