Numpy 介绍和基础使用详解

发表于:2019-8-20 11:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:木秀    来源:博客园

  NUMPY INTRODUCTION
  NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表结构要高效的多。
  高性能科学计算和数据分析的基础包,总结:
  NUMPY是一个Python科学计算基础库,提供了多维向量
  NUMPY提供了用于数组快速操作的方法,数学,逻辑,排序,选择,线性代数,统计等
  NUMPY采用预编译的C代码完成,效率更高
  安装:
 pip install numpy
    使用:
 import numpy as np
   行业惯例将np作为numpy,将pd作为pandas。下文所有np均指的是numpy
  认识轴:
  轴【axis】:
  既然是多维数组,先理清一下轴,类似于我们学习的X、Y、Z
  二维数组的轴:
  图一
  三维数组的轴:
  图二
  使用NUMPY创建数组:
  例:创建一个图一的数组
 
  方法1:    np.array([])
   a=np.array([[1,2,3],[4,5,6]])
  b=np.array([range(1,4),range(4,7)])
  c=np.array([[i for i in range(1,4)],[i for i in range(4,7)]])
  [[1 2 3]
  [4 5 6]]
  方法2:    np.arange()
  #1~6 步数为1
 d=np.arange(1,7,1)
  [1,2,3,4,5,6]
  #将一维数组转变为二维
 d=d.reshape(2,3)
  [[1 2 3]
  [4 5 6]]
  常用属性和方法
  形状
  ndarray.shape
  重新改变数组形状
  ndarray.reshape(x_dim, y_dim, z_dim,…)
  数组的维度
  ndarray.ndim
  itemsize输出array元素的字节数
  numpy.itemsize
  数组的形状:
  nparray.shape:
  #查看数组的形状维度
  d=np.arange(1,7,1)
  print(d.shape)
  (6,)
  nparray.reshape:
  #改变数组的维度,规则1*6==2*3
  d=d.reshape(2,3). #或者: d=np.reshape(d,(2,3))
  print(d.shape)
  (2, 3)
  获取数组的维度,可使用len(nparray.shape),即元祖的维度,即numpy.itemsize
  将多维数组转换为一维数组方式:
  自己动手:
   def createOnenp(nparray):
  num=1
  for i in len(nparray.shape):
  num=num*nparray.shape[i]
  return nparray.reshape(num)
  实际又是自己在造轮子,可使用np自带方法:
  nparray= nparray.flatten()
   a=np.array([[1,2,3],[4,5,6]])
  print(a)
  a=a.flatten()
  print(a)
  [[1 2 3]
  [4 5 6]]
  [1 2 3 4 5 6]
  数组的计算:
  情况一:数组和数值直接运算
   a=np.array([i for i in range(1,7)])#生产一维数组
  a=a.reshpe(2,3)
  [[1 2 3]
  [4 5 6]]
  数组可以直接与数字进行四则运算(+、-、*、/)
  即数组里的每一个值分别四则运算
 print(a+2)
  [[3 4 5]
  [6 7 8]]
 print(a/0)
  [[inf inf inf]
  [inf inf inf]]
  在numpy中,/0并不会报错,
  inf(infimum)表示无穷,
  nan(not a number)代表未定义或不可表示的值,
  情况二:数组与数组计算
  这里要注意了,数组和数组的计算和矩阵是不同的
  矩阵的乘积:
  数组的乘积:
  相同的多维数组或直接与单维度轴相同,可以直接四则运算:
  方式:广播(broadcast)
  a:
  [[1 2 3]
  [4 5 6]]
 print(a*a)
  [[ 1  4  9]
  [16 25 36]]
  b:
  [1 2 3]
 print(a*b)
  [[ 1  4  9]
  [ 4 10 18]]
  c:
  [[1]
  [2]]
 print(a*c)
  [[ 1  2  3]
  [ 8 10 12]]
  数组的操作:
  1、转置操作
   a=np.array([i for i in range(1,7)])#生产一维数组
  a=a.reshpe(2,3)
  [[1 2 3]
  [4 5 6]]
  a.T
  [[1 4]
  [2 5]
  [3 6]]
  a.transpose()
  [[1 4]
  [2 5]
  [3 6]]
  a.swapaxes(1,0)    #交换0轴和1轴
  [[1 4]
  [2 5]
  [3 6]]
  2、切片
  a=np.array([i for i in range(1,10)])#生产一维数组
  a=a.reshpe(3,3)
  [[1 2 3]
  [4 5 6]
  [7 8 9]]
  2.1取行
  2.1.1、取第x行
  print(a[x])
 print(a[1])
  [4 5 6]
  2.1.2、取多行
  print(a[[x,x]])
 print(a[[0,2]])#取第一行和第三行
  [[1 2 3]
  [7 8 9]]
  2.1.3、取连续多行
  print(a[x:y:z]) #连续取从x行到y行,不包括y,间隔为z
 print(a[0:3])#取第一行到第四行不包括第四行,也就是前面三行,和list切片类似,左闭右开
  [[1 2 3]
  [4 5 6]
  [7 8 9]]
 print(a[0:3:2])
  [[1 2 3]
  [7 8 9]]
  2.2取列
  和取行类似
  a[:,x]#取x列
  a[:,x:y]#取下标为x到下标为y-1的列
  a[:,x:y:z]#取下标为x到下标为y-1,间隔为z的列
  a[:,[x,y]] #取下标为x,y的两列
  2.3取某一点
  a[1,1]=a[1][1]
  5
  2.4取某一部分
 print(a[1:3,1:3])
  [[5 6]
  [8 9]]
  布尔索引、三元运算、裁剪
   a=np.array([i for i in range(1,10)])#生产一维数组
  a=a.reshpe(3,3)
  [[1 2 3]
  [4 5 6]
  [7 8 9]]
  布尔索引:
 print(a>5)
  [[False False False]
  [False False  True]
  [ True  True  True]]
  print(a[a>5])
  [6 7 8 9]
  a[a>5]=5
  print(a)
  [[1 2 3]
  [4 5 5]
  [5 5 5]]
  三元运算:
   data1=np.where(a<5,1,9)#比5小的全部修改为1,其他的改为9
  Print(data1)
  [[1 1 1]
  [1 9 9]
  [9 9 9]]
  裁剪
  data2=a.clip(3,7)#小于3的替换为3,大于7的替换为7
  print(data2)
  [[3 3 3]
  [4 5 6]
  [7 7 7]]
  常用的统计函数
  求和:nparray.sum(axis=None)
  均值:nparray.mean(axis=None) 受离群点的影响较大
  中值:np.median(nparray,axis=None)
  最大值:nparray.max(axis=None)
  最小值:nparray.min(axis=None)
  极值:np.ptp(nparray,axis=None) 即最大值和最小值只差
  标准差:nparray.std(axis=None)
  其他方法
  获取最大值最小值的位置
  np.argmax(nparray,axis=0)
  np.argmin(nparray,axis=1)
  创建一个全0的数组: np.zeros((3,3))
  [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]
  创建一个全1的数组: np.ones((3,3))
  [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]
  创建一个对角线为1的正方形数组(方阵):np.eye(3)
  [[1. 0. 0.]
  [0. 1. 0.]
  [0. 0. 1.]]
  NUMPY中的复制操作
  a=b 完全不复制,a和b相互影响
  a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  a = b.copy(),复制,a和b互不影响
  等等用法:
  numpy.sort()
  numpy.amin()  numpy.amax()
  numpy.mean()  numpy.average()
  numpy.std()  # sqrt(mean((x - x.mean())**2))
  numpy.var()  # mean((x - x.mean())** 2)
  numpy.sin() cos() tan() pi arcsin(), arccos() arctan() degrees()

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号