Numpy数组的属性
ndarray.ndim:数组轴的个数
ndarray.shape:数组的维度,该值是个元组
例:对于m行n列的矩阵,shape的值是(m,n)。shape元组的长度就是维度的数目,及ndim(秩)
ndarray.size:数组元素的总数,其值等于shape中元素的乘积
ndarray.dtype:描述数组中元素类型的对象
import numpy as np
a=np.array([1,2,3])
b=np.array([[1,2,3],[4,5,6]])
c=np.array([[[1,1],[2,1],[3,1]],[[4,1],[5,1],[6,1]]])
print('a,秩:',a.ndim,'数组维度',a.shape,'元素个数:',a.size)
print('b,秩',b.ndim,'数组维度:',b.shape,'元素个数:',b.size)
print('c,秩:',a.ndim,'数组维度:',c.shape,'元素个数:',c.size)
Numpy内置函数
(1)zeros()函数,生成全由"0"构成的数组
格式:zeros(shape[,dtype,order])
功能:创建一个指定大小的数组,数组元素以0来补充,默认浮点型
参数:shape,指定形状 dtype,数据类型(默认为float类型)
order,指定数组元素在内存中存储顺序,'C'表示行优先,'F'表示列优先,默认值为'C'
(2)np.ones()函数,生成全由"1"构成的数组
格式:ones(shape[,dtype,order])
功能:创建一个指定大小的数组,数组元素以1来补充
import numpy as np
x=np.zeros(5)
y=np.ones(5)
print('x',x)
print('y:',y)
x1=np.zeros((5,),dtype=int)
print('x1:',x1)
y1=np.ones((2,2),dtype=[('x','int'),('y','float')],order='C')#行中的数值为int,列中的数值为float
print('y1',y1)
由现有数组生成的数组
array函数。Python中的列表不存在维度的问题,但是数组是有维度的,使用函数np.array()的作用就是把列表转化为数组
格式:array(object,dtype,copy,order,subok,ndmin)
功能:将object对象转化为Numpy数组
参数:
object:数组或嵌套的数列
copy:对象是否需要复制,可选
dtype:数组元素的数据类型,可选
order:创建数组的样式,'C'为行方向,'F'为列方向,A为任意方向(默认)
subok:默认返回一个与基本数据类型一致的数组
ndmin:指定生成数组的最小维度
import numpy as np
n1=np.array([[1,2,3],[4,5,6]],dtype=float)
print(n1)
生成固定范围的数组
arange()函数
格式:arange(start,stop[,step],dtype)
功能:从start开始到stop结束的范围内以step为步长,生成一个数组对象,结果不含终值
参数:
start:范围的起始值,可选,缺省为0
stop:范围的终止值(不包含)
step:两个值的间隔,又称步长,可选,缺省为1
dtype:表示数据类型,可选,缺省时使用输入数据的类型
import numpy as np
x1=np.arange(10)
x2=np.arange(10,30,5,dtype=float)
print(x1)
print(x2)
linspace函数
linspace()函数用于创建一个一维数组,数组是由一个等差数列构成的
格式:np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
功能:创建一个数值范围start到stop的范围内num个等差数列构成的数组。默认情况(即endpoint=True)下,结果数组包含终值
参数:
start:开始数值
stop:结束数值,如果endpoint值为True,该值包含于数组中,否则不包含;
num:样本数量,可选,缺省为50
endpoint:该值为True时,数组中包含stop值,反之不包含,可选,缺省为True
retstep:可选,如果为True时,生成的数组中显示间距,反之不显示
dtype:表示数据类型
import numpy as np
x=np.linspace(1,100,199,endpoint=True,retstep=True,dtype=float)
print(x)
改变数组的形状
reshape()函数
功能:可以在不改变数据的条件下修改数组的形状
格式1:Numpy.reshape(arr,newshape,order='C')
格式2:arr.reshape(newshape,order='C')
参数:
arr:表示原数组
newshape:表示整数或者整数数组,新的形状应兼容原有形状
order:可选,可选范围为{'C','F','A'},按照order的顺序读取a的元素,并按照索引顺序将元素放到变换后的数组中。C'表示按行,'F'表示按列,'A'为原顺序
import numpy as np
a=np.linspace(2,10,5)
b=np.linspace(2,6,20)
c=np.linspace(10,19,10)
print("a:",a)
print("b:",b)
print("c:",c)
print("b.reshape:\n",b.reshape((4,5),order='C'))
print("c.reshape:\n",c.reshape(2,5))
empty()函数,生成指定形状的数组
格式:empty(shape[,dtype,order])
功能:创建一个形状为shape的未初始化数组,值为随机值
例如:a7=np.empty((3,4)),生成3行4列的随机浮点数(float)构成的二维数组
import numpy as np
a=np.empty((2,3))
b=np.empty(3,dtype=int)
print('a:\n',a)
print('b:\n',b)
数组的拼接
NumPy.c_和NumPy.r_
NumPy.c_和NumPy.r_这两个不是函数,准确的说是CClass类中的一个实例,其功能是将数组拼接,区别在于NumPy.c_的功能是将数组按列拼接,要求拼接的数组行数相同,NumPy.r_的功能是将数组按行拼接,要求拼接的数组列数相同
Numpy的数学函数
三角函数
import numpy as np
a=np.array([0,30,45,60,90,120])
print('sin(a):\n',np.sin(a*np.pi/180))
print('cos(a):\n',np.cos(a*np.pi/180))
print('tan(a):\n',np.tan(a*np.pi/180))
其他数学类函数
import numpy as np
a=np.array([1.0,2.6,3.8,4.3])
print('向上取整:',np.ceil(a))
print('向下取整:',np.floor(a))
print('四舍五入取整:',np.around(a))
print('开方:',np.sqrt(a))
b=np.linspace(-3,3,5)
print('b:',b)
print('b的绝对值:',np.abs(b))
print('分别取出b的小数部分和整数部分:',np.modf(b))
print('e为底的指数函数:',np.exp(b))
Numpy的随机模块
随机数的生成函数
Numpy.random.rand(d) 函数
格式:rand(d)
功能:根据给定的维度生成[0,1)之间的数据,包含0,不包含1
参数d为生成随机数的维度(一维或多维)
import numpy as np
a=np.random.rand(5) #生成包含5个一维随机数数组
b=np.random.rand(3,4) #生成3行4列的随机数数组
print('a:',a)
print(b)
NumPy.random.randint()
格式::randint(low,high,size,dtype)
功能:返回随机整数,随机整数的范围区间为[low,high),包含low,不包含high
参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认为整型。
high省略时,默认生成随机数的范围是[0,low)
import numpy as np
a= np.random.randint(1,10)
b=np.random.randint(1,5,size=(2,3))
print(a)
print(b)
Numpy.random.randn()函数
格式:randn(d)
功能:返回标准正态分布(均值为0,标准差为1)的数组
参数d为数组的形态(一维或多维)
Numpy.random.standard_normal函数
格式:standard_normal(size=None)
功能:同randn()函数,也是返回标准正态分布的数组样本,,不同的是它的数组形态由参数size指定,一维数组的size对应一个整数值,对于多维数组,size必须是元组形式,
函数randn()和standard_normal()都只能返回标准正态分布,对于更一般的正态分布,需要用到式子
“x*np.random.randn(d)+u”’进行修正
注:randn()的参数方式与Numpy中的其他函数都不同,不建议使用
import numpy as np
a=np.random.standard_normal(size=(3,4))
print(a)
Numpy.random.normal()函数(更好)
格式:normal(loc=0.0,scale=1.0,size=None)
功能:返回均值为loc,标准差为scale的正态分布的样本,size表示生成数组的维度,如果是一维数组,size是一个值,如果是多维数组,size的值为一个元组。
normal函数默认情况下返回标准正态分布,即loc=0.0,scale=1.0
import numpy as np
import matplotlib.pyplot as plt
u,sigma=0,1
x=np.random.normal(u,sigma,50)
y=(1/np.sqrt(np.sqrt(np.pi*2)*sigma))*np.exp(-(x-u)**2/2*sigma**2)
plt.scatter(x,y)
plt.show()
Numpy的索引和切片
Numpy数组对象的内容可以通过索引或切片来访问和修改
Numpy数组可以通过冒号分隔切片参数(start:stop:step)
import numpy as np
a=np.arange(10)
s=slice(2,7,2)
print(a[s])
print(a[2:7])
import numpy as np
b=np.array([[1,2,3],[3,4,5],[4,5,6]])
print('从第二行开始切片:\n',b[1:])
print('从第三行开始切片:\n',b[2:])
print('切片第三行的所有元素:\n',b[2,...])
print('第二列及其剩余元素:\n',b[...,1:])