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

 
NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
ndarray对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。
ndarray内部由以下内容组成:
notion image
  • 一个指向数据(内存或内存映射文件中的一块数据)的指针
  • 数据类型或dtype,描述在数组中的固定大小值的格子
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组
数组索引和切片
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
目录
目录

 
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
改变数据的条件下修改形状
flat
数组元素迭代器
flatten
返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
拷贝
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.abs np.fabs
绝对值,对于非负数值可以使用更快的np.fabs
np.sqrt
开根
np.square
平方
np.exp
计算指数( )
np.log,np.log10,np.log2,np.log1p
求以e为底,以10为低,以2为低,以(1+x)为底的对数
字节交换
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 中每个元素中的字节进行大小端转换