1.Python--numpy库

》》点赞,收藏+关注,理财&技术不迷路《《

 

目录:

1.Python--numpy库

1.0 numpy基础——ndarray对象

ndarray(The N-dimensional array)对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象。

1 、简单介绍ndarray对象;

2、ndarray对象的常用属性;

3、如何创建ndarray对象;

4、ndarray元素访问。

它的维度以及个维度上的元素个数由shape决定。

1.0.1 numpy.ndarray()

ndarray函数就是numpy的构造函数,我们可以使用这个函数创建一个ndarray对象。构造函数有如下几个可选参数:

1.Python--numpy库

 

1.0.2 ndarray对象的常用属性

ndarray对象最常用的属性:

1.Python--numpy库

 

1.0.3 创建ndarray

array():

使用array函数,从常规的python列表或者元组中创建数组,元素的类型由原序列中的元素类型确定。

zeros(),ones(),empty():

函数ones创建一个全1的数组、函数zeros创建一个全0的数组、函数empty创建一个内容随机的数组,在默认情况下,用这些函数创建的数组的类型都是float64,若需要指定数据类型,只需要闲置dtype参数即可:

1.Python--numpy库

zeros/ones/empty_like():

上述三个函数还有三个从已知的数组中,创建shape相同的多维数组:ones_like、zeros_like、empty_like,用法如下:

1.Python--numpy库

还有如下几个特殊的函数:

1.Python--numpy库

eye函数的全1的对角线位置有参数k确定

1.Python--numpy库

 

arange(), linspace(), logspace():

arange函数类似python中的range函数,通过指定初始值、终值以及步长(默认步长为1)来创建数组

linspace函数通过指定初始值、终值以及元素个数来创建一维数组

logspace函数与linspace类似,只不过它创建的是一个等比数列,同样的也是一个一维数组

1.Python--numpy库

fromstring() & fromfunction():

fromstring函数从字符串中读取数据并创建数组

fromfunction函数由第一个参数作为计算每个数组元素的函数(函数对象或者lambda表达式均可),第二个参数为数组的形状

1.Python--numpy库

除了上面两个函数还有其他几个类似的从外部获取数据并创建ndarray,比如:frombuffer、fromfile、fromiter,还没用过,等用到了在详细记录

 

1.0.4 ndarray创建特殊二维数组

ndarray提供了一些创建二维数组的特殊函数。numpy中matrix是对二维数组ndarray进行了封装之后的子类。这里介绍的关于二维数组的创建,返回的依旧是一个ndarray对象,而不是matrix子类。关于matrix的创建和操作,待后续笔记详细描述。为了表述方便,下面依旧使用矩阵这一次来表示创建的二维数组。

diag函数返回一个矩阵的对角线元素、或者创建一个对角阵,对角线由参数k控制

diagflat函数以输入作为对角线元素,创建一个矩阵,对角线由参数k控制

tri函数生成一个矩阵,在某对角线以下元素全为1,其余全为0,对角线由参数k控制

tril函数输入一个矩阵,返回该矩阵的下三角矩阵,下三角的边界对角线由参数k控制

triu函数与tril类似,返回的是矩阵的上三角矩阵

vander函数输入一个一维数组,返回一个范德蒙德矩阵

1.Python--numpy库

 

1.0.5 array元素访问

一维数组:

对于一维的ndarray可以使用python访问内置list的方式进行访问:整数索引、切片、迭代等方式

关于ndarray切片

与内置list切片类似,形式:

array[beg:end:step]

beg: 开始索引

end: 结束索引(不包含这个元素)

step: 间隔

需要注意的是:

beg可以为空,表示从索引0开始;

end也可以为空,表示达到索引结束(包含最后一个元素);

step为空,表示间隔为1;

负值索引:倒数第一个元素的索引为-1,向前以此减1

负值step:从后往前获取元素

1.Python--numpy库

 

特别注意的是,ndarray中的切片返回的数组中的元素是原数组元素的索引,对返回数组元素进行修改会影响原数组的值

1.Python--numpy库

除了上述与list相似的访问元素的方式,ndarray有一种通过列表来指定要从ndarray中获取元素的索引,例如:

1.Python--numpy库

 

多维数组:

多维ndarray中,每一维都叫一个轴axis。在ndarray中轴axis是非常重要的,有很多对于ndarray对象的运算都是基于axis进行,比如sum、mean等都会有一个axis参数(针对对这个轴axis进行某些运算操作),后续将会详细介绍。

对于多维数组,因为每一个轴都有一个索引,所以这些索引由逗号进行分割,例如:

1.Python--numpy库

需要注意的是:

当提供的索引比轴数少时,缺失的索引表示整个切片(只能缺失后边的轴)

当提供的索引为:时,也表示整个切片

可以使用...代替几个连续的:索引

1.Python--numpy库

多维数组的迭代

可以使用ndarray的flat属性迭代数组中每一个元素

1.Python--numpy库

 

1.1 numpy概念, 属性和运算

1.1.1 概念和属性

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。NumPy 是一个运行速度非常快的数学库,主要用于数组计算。它可以让你在 Python 中使用向量和数学矩阵,以及许多用 C 语言实现的底层函数。

NumPy 的核心是数组(arrays),具体来说是多维数组(ndarrays)。

数组的定义:

1.Python--numpy库

数组也有一些基本性质(维度,形状,元素数)

1.Python--numpy库

np.array()

array.ndim

array.shape

array.size

 

1.1.2 数组的创建:

数组类型定义:

dtype = np.int/float 定义数组类型

a = np.array([[1,2,3],[2,3,4]])      定义一个多维数组

a = np.zeros((x, y),dtype = np.int16) 定义一个x行,y列的零矩阵(全为零)

a = np.ones((x, y),dtype = np.int16) 定义一个x行,y列的单位矩阵(全为1)

上面两个要是不写dtype的话,默认都是float。

a = np.arange(x, y, a) 定义一个从x到y的数组,步长为a。类似于python中的range。

a = np.arange(x, y, a).reshape((c,b)) 定义一个从x到y的数组,步长为a。类似于python中的range。然后数组形状c 行 b列。(这里面会存在长度不对等的问题!下面有例子)

a = np.linspace(x, y, a) 定义一个从x到y的数组,线,分割为a段(a个数)。

a = np.linspace(x, y, a).reshape((c, b)) 定义一个从x到y的数组,线,分割为a段(a个数)。以c行b列数组输出。

1.Python--numpy库

如果不特别指明的话,int,float就是指的64位。(根据个人电脑而定。)当然你也可指定int64, float64。

1.Python--numpy库

1.Python--numpy库

 

1.1.3 矩阵的运算和操作

以下是  加,减,乘,次方,除法,取余(模运算),整除。。。:

(可以拿我们最简单的那套,/,//,%等等,也可以调用内置函数比如:np.divide = /, np.reminder = np.mod() = % 等等)

加减乘除都是数组中每个元素意义对应运算的。

一维数组:

1.Python--numpy库

 

二维数组(矩阵):

矩阵的加减都很简单,这里重点将乘法!!因为 a * b 不等于np.dot(a,b)

a * b 是矩阵中对应位置相乘。np.dot(a, b)才是矩阵乘法。

另外:!!! np.dot(a, b) = a.dot(b)  两种表达方式!!!

1.Python--numpy库

随机生成数(都是生成0-1中的数字):

np.random.random()

1.Python--numpy库

求和,最大值,最小值:

np.sum() np.sum(X, axis = n)  每n行的和

np.max() np.max(X, axis = n)  n行的最大值

np.min()

(axis = 0:代表没有行,就是列,max(axis=0)就是每一列的最大值,axis = 1就是每一行的最大值)

….

1.Python--numpy库

注意要是总共只有两行,不能让axis = 2。可能想得是axis = 2就等于max()了,但是axis=2会越界报错!!

索引最大值最小值位置,平均值,中位数,前N位和:(都可以具体到每一行每一列!!)

索引返回的是位置:

1.Python--numpy库

查找非零数:

1.Python--numpy库

转置矩阵和矩阵的乘法:

1.Python--numpy库

 

clip用法:

1.Python--numpy库

 

1.1.4 List(python), array(numpy)与matrix(numpy)

Python列表和Numpy数组的区别:

Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

使用Python列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用Numpy呢?

Numpy是专门针对 数组的操作和运算 进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。

通常Numpy数组中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以在通用性能方面Numpy数组不及Python列表,但在科学计算中,可以省掉很多循环语句,代码使用方面比Python列表简单的多。

Numpy数组和矩阵的区别:

1. Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

2. 在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。

3. matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H f得到共轭矩阵, 加 .I 得到逆矩阵。

 

1.2 numpy的索引

数组中元素的索引,切片索引:

A[]

A[][] = A[X,Y]

: 冒号代表着输出全部

A[: , y]  输出 y 列的全部行,或者说输出每行的y列

A[x, a:b]  输出第x行的,第a到b列元素

1.Python--numpy库

输出每一行 for  in:  输出每一列也是for  in 但是要用转置矩阵!!

flatten() 函数和flat的使用:

A.flatten() 是将多维数组平铺,也就是说不管几维,都以一维数组形式输出。

flat:平面。 flatten:展开,平铺

1.Python--numpy库

 

1.3 array的合并

横向合并:hstack()

纵向合并:vstack()

(2,)是因为shape返回tuple类型,单个元素情况下必须写逗号,tuple类型的单个元素(3)自动变int。

行变列,列变行。再合并

(x,y)newaxis的替换。比如[2, 2] 要变成列向量,1. reshape()。2. 改为[2, 2][: , newaxis]。

也可以使用指定合并:

concatenate(?, axis = ?),axis=0就是转为列,axis=1就是变为行。

一个统一的问题:维度不一样的数组不能拼接!!

1.Python--numpy库

1.Python--numpy库

1.Python--numpy库

 

1.4 array的分割

等份分割:

hsplit(X,n) 注意n,越界或者不整除会报错

vsplit(X,n) 比如(3,4),要是按列分割,n=3就会错,因为4只可以分割1,2,4.如果是3的话就会导致出错

split(X,n,axis=?)

不等份分割:

array_split(X,n,axis=?) n可以随意,要是超出了范围就会后面加空数组来补,空数组的shape还是和前面一样。

1.Python--numpy库

1.Python--numpy库

 

1.5 copy&deep copy

1.Python--numpy库

!!!数组中只接受同类型!!!

1.Python--numpy库

python中变量就是地址. python中的默认赋值或者传值都是引用。

浅拷贝,就是指针指向同一片内存地址,同一个对象

a is b is c is d.(is就是比较对象的地址!!”==“是比较对象的值)

b,c,d 其实都是等于a的。a任何变化都会同时引起bcd变化。

四个指向同一个地址,这个地址中放着一个数据。

bcd的变换,同时也会影响a的变化!!!

如果想改变值又不想关联起来。就要用到deep copy。—— X.copy()

(只想关联值,但是不想关联关系)

1.Python--numpy库