numpy基础
一、认识numpy1.numpy简介NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray
一、认识numpy
1.numpy简介
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
2.numpy安装
在cmd窗口输入pip install numpy即可
pip install numpy
然后在cmd窗口输入python,进入python环境,输入以下代码检验numpy模块是否安装成功
import numpy as np
array = np.array([1,2,3])
另外你可以输入np.__version__来查看你安装的numpy是哪一个版本
二、基础知识
1.创建numpy数组
numpy中的数组是numpy.ndarray型的对象,其中元素的数据类型和大小都是一样的,接下来让我们来如何创建一个numpy数组
numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0)
object:是一个列表,其中可以通过嵌套多级列表来控制数组的维度
dtype:指定数组中元素的类型,包括复数类型
copy:对象是否需要复制
order:创建数组的样式
subok:为False会返回一个与基类类型一致的数组,否则子类将被传递
ndmin:指定数组的最小维度,关于维度,我们可以数输出后的数组的第一个元素前面有几个左方括号,有几个就是几维
创建一个numpy数组
array = np.array([1,3.14,'hello']) #这是一个最简单的numpy数组
numpy数组中的类型会被统一成所有元素中优先级最高的元素的类型,优先级:str>float>int
比如array中的元素全部都是字符串类型
此外,还有几种创建numpy数组的方法
np.eye(5) #生成一个5×5的对角矩阵
np.ones((5,3)) #创建一个5行3列的全部元素都是1的矩阵
np.zeros(shape=(3,3)) #创建一个3行3列的全部元素都是0的矩阵
np.full(shape=(2,3),fill_value=6) #创建一个2行3列的元素都是6的矩阵
np.random.randint(0,10,size=(4,3)) #生成1个4行3列的元素为0到10之间的整数的矩阵
np.arange(0,11,step=1) #产生0到10的ndarray列表,步长为1
2.元素访问
import numpy as np
array=np.array([[1,2,3],[2,3,4]])
多层级访问
print(array[0][1],array[1,2])
print(array[[0,1],[1,2]]) #访问2,4
以列表作为索引访问
array1=np.array([1,2,3,4,5,6])
array1[[0,2,4]] #访问1,3,5
使用bool列表访问
array1=np.array([1,2,3,4,5,6])
print(array1[[True,False,True,True,True,False]])
切片访问
array2=np.random.randint(0,10,size=(5,4,3))
'''生成的array为:
[[[4, 1, 7],
[3, 2, 5],
[1, 6, 1],
[6, 7, 7]],
[[3, 3, 9],
[5, 9, 0],
[9, 4, 6],
[2, 0, 4]],
[[6, 0, 0],
[0, 1, 7],
[5, 7, 4],
[7, 1, 4]],
[[0, 6, 3],
[5, 9, 8],
[7, 1, 3],
[4, 5, 3]],
[[8, 0, 8],
[4, 4, 4],
[8, 7, 1],
[0, 0, 3]]]'''
每个维度内跟列表的切片访问原理相同,每个维度之间用逗号隔开
array2[0:2,1:3,1:3]
访问的是第三维度的第0和第1两个元素,第二维度的第1和第2两个元素,第一维度的第1和第2两个元素
3.Numpy数组的属性
shape:数组的维度,如(5,3)表示该数组是5行3列
size:数组中元素的总个数
dtype:数组中元素的类型
ndim:数组的秩,一维的秩为1,二维数组的秩为2,以此类推
itemsize:数组中每个元素的大小
flags:数组的内存信息
4.改变形状
矩阵的维度是可以改变的,但是改变前后矩阵中元素的总个数要相同
array2.reshape(2,3,10) #5×4×3=2×3×10=60
5.级联
concatenate函数
#concatenate((a1, a2, ...), axis=0, out=None)
#axis=0 横向连接
#axis=1 纵向连接
横向连接 numpy.vstack()
纵向连接 numpy.hstack()
6.切割
#numpy.split(ary, indices_or_sections, axis=0)
#ary是被切割的对象
#indices_or_sections是被切割为几块 切割方向的元素数量要能够整除它
#也可以是一个列表
#axis控制横向切还是纵向切
#同样也有np.hsplit()和np.vsplit()
arr=np.random.randint(1,100,size=(6,6))
part1,part2=np.split(arr,indices_or_sections=2) #切割为两个数组
arr1=np.split(arr,indices_or_sections=[2,5],axis=0)
#前两行是一块,第三行到第五行是一块,最后一行又是一块
7.产生随机数
linspace函数
#np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0,)
#主要看前三个参数 从start开始,到stop停,等差的产生num个数字
print(np.linspace(4,9,3))
#输出[4. 6.5 9. ]
random.randn(n):从标准正态分布中返回n个值
random.normal(): 从高斯分布中返回值
random.permutation(n):随即返回一个打乱的序列,可用于随机访问
8.聚合操作
求和:sum()
求平均值:mean()
求最大值:max()
求最小值:min()
求最大值的索引:argmin()
求标准方差:std()
求方差:var()
求中位数:median()
快速排序:sort()
查看是否有True:any()
查看是否全部为True:all()
9.广播机制
广播机制输出的数组是输入数组形状的各个维度上的最大值。
如果两个数组的形状相同,则对应元素相加
如果两个数组的形状不同,则必须有一个维度的长度为1,否则就会报错
10.矩阵操作
跟线性代数中讲的一样,这里就不具体写了
由于本人水平有限,文中不当之处还请各位大佬多多指正
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)