全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Numpy中常用的方法和属性汇总

发布时间:2022-08-12 16:57:26
发布人:qyf

  本篇文章我们继续带大家学习Numpy的数据操作部分,主要给大家系统的介绍一下Numpy中常用的方法和属性。

  虽然我们前面也用过一些方法,但是我们没有系统的给大家介绍,本次我们分成两部分,详细的给大家介绍一下Numpy中的一些方法和使用。

  Numpy的常用方法

  Ndarray对象的常用方法

  Numpy的常用方法

  生成函数

  生成ndarray对象的函数,注意所有np即为numpy的简写。

  np.arange(n): 生成指定范围的一个数据序列,返回的是ndarray对象。其实np.arange()的使用很类似内置函数range(),只不过range()函数生成的数据类似一个列表,而np.arange()生成的是ndarray对象。

  np.array(list):将一个列表转成ndarray对象。

  import numpy as np #导入numpy模块,起别名为np

  import warnings

  warnings.filterwarnings("ignore") # 忽略警告信息

  data = np.arange(10)

  display(data)

  data1= list(range(10))

  display(type(data1))

  data1=np.array(data1)

  display(data1)

  # 当然使用np.array()还可以创建二维的数组

  array = [[1,2],[3,4],[5,6],[7,8],[9,10]]

  array = np.array(array)

  display(array)

  # 如果是一维数组:向量

  # 如果是二维数组,那么就看做是一个矩阵

  结果:

  array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

  list

  array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

  array([[ 1, 2],

  [ 3, 4],

  [ 5, 6],

  [ 7, 8],

  [ 9, 10]])

  使用np.ones()、np.zeros()、np.full() 生成ndarray对象

  np.ones(N) : 生成一个N长度的一维全1的ndarray对象

  np.zeros(N): 生成一个N长度的一维全0的ndarray对象

  np.full(N) : 生成一个N长度的一维值全为指定值的ndarray对象

  import numpy as np

  array1 = np.ones((3,4)) # 创建值全为1的数组。

  display(array1)

  array2 = np.zeros((3,4)) # 创建值全为0的数组。

  display(array2)

  array3 = np.full((3,4),6) # 创建值全为指定值的数组。

  display(array3)

  结果:

  array([[1., 1., 1., 1.],

  [1., 1., 1., 1.],

  [1., 1., 1., 1.]])

  array([[0., 0., 0., 0.],

  [0., 0., 0., 0.],

  [0., 0., 0., 0.]])

  array([[6, 6, 6, 6],

  [6, 6, 6, 6],

  [6, 6, 6, 6]])

  大家可以发现ones和zeros得到的数组是浮点型的。那如何设置它的数据类型呢?

  A. 在声明的时候可以使用,比如array1 = np.ones((3,4),dtype=np.int)

  B. 使用ndarray对象.astype(数据类型)进行类型转换

  Numpy的数据类型有哪些呢?

  当然若想得到一些随机数组成的数组,我们还可以使用numpy.random中的方法完成

  np.random.rand 生成指定形状的0­~1之间的随机数

  np.random.random 生成指定形状的0­~1之间的随机数

  np.random.randn 标准正态分布

  np.random.normal 指定均值和方法的正态分布

  np.random.randint 生成指定数值范围内的随机整数

  np.random.seed 按照种子来生成随机数,种子一样,则生成的结果必一致

  np.random.shuffle 打乱数组元素顺序

  np.random.uniform 均匀分布

  np.random.choice 按照指定概率从指定集合中,生成随机数

  选出几个给大家介绍一下

  np.random.rand 与np.random.random两者类似,都是产生0­~1之间的随机数,但是函数的参数不一样。

  import numpy as np

  d1 = np.random.random((2,3)) #注意区别多(少)了一对()

  d2 = np.random.rand(2,3)

  display(d1,d2)

  np.random.randn() 服从正态分布的从0­~1之间的随机数

  dn = np.random.randn(2,3)

  display(dn)

  np.random.normal() 指定均值和方差的正态分布

  # loc:float 此概率分布的均值(对应着整个分布的中心centre)

  # scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)

  # size:int or tuple of ints 输出的shape,默认为None,只输出一个值

  dn= np.random.normal(loc=4, scale=0.01, size=4)

  dn1= np.random.normal(loc=4, scale=0.01, size=(2,4))

  display(dn,dn1)

  np.random.randint() 随机整数

  # 在1-10范围里,随机生成5个int32类型的数值,生成的结果集可能出现重复数值 arr1 = np.random.randint(1, high=10, size=5, dtype=np.int32) display(arr1) # 生成一个指定范围[-10,0]的随机二维数组 arr2 = np.random.randint(-10, high=10, size=(4, 6), dtype=np.int32) display(arr2)

  np.random.choice() 从指定数据集中,随机抽选一个数据

  # 从数值集合中,按照指定概率生成随机数,参数P的总和一定得是1

  arr = np.random.choice([0,3,5,7,8,9], p=[0.1, 0.2, 0.3, 0.4,0.2,0.5]) display(arr)

  数学函数与运算操作

  数学相关

  Numpy提供了许多数学操作相关函数,常用的函数有:

  abs / fabs :绝对值

  ceil / floor :向上/向下取整

  log / log2 / log10 :对数

  exp :e为底的指数

  modf :将浮点数num分解成整数部分和小数部分。

  sin / sinh / cos / cosh :正玄、余玄...

  sqrt :开平方

  import numpy as np

  arr = np.array([[-1,1.2,0.8,-3.9],[-6,1,-1.8,0.9]])

  display(arr)

  #绝对值

  a = np.abs(arr)

  display(a)

  #向上/向下取整

  b = np.ceil(arr)

  b1 = np.floor(arr)

  display(b,b1)

  # 对数函数

  c = np.log(arr)

  display(c)

  # e为底数的指数函数

  d = np.exp(arr)

  display(d)

  # 浮点数拆分成 整数 和 浮点数 两部分

  # 返回一个元组,含有两个元素(数组类型),第一个元素返回小数部分,第二个元素返回整数部分。

  e = np.modf(arr)

  display(e)

  #开平方

  f = np.sqrt(arr)

  display(f)

  运算相关的有:

  数组与数(一维数组与一维数组)的运算(加+、减­、乘*、除/、取整//、取模%、平方 * * 、立方 * * * ):

  加:“+” 或者np.add(a, b)

  减:“­-” 或者np.subtract(a, b)

  乘:“*” 或者np.multiply(a, b)

  除:“/” 或者np.divide(a, b)

  次方:“ ** ” ,如2^7=2**7

  取整函数:“ // ”或者 np.ceil(), np.floor(), np.trunc()/fix(), np.rint(), np.around()

  取模:“%”或者np.mod()和np.remainder()

  矩阵乘积:np.dot(a, b)

  判断: > 、 >= 、< 、 <= 、 == 、 !=

  条件:all() 、any()

  逻辑条件: & 、 | 、 !

  上篇文章我们提到过运算相关的符号,当然每个符号还有对应的方法。在Numpy中的运算基本都是遵守广播机制的。现在我们在看一下关系运算符:

  import numpy as np

  arr1 = np.array([1,2,3,4,5])

  arr2 = np.array([0,2,-5,-4,8])

  display(arr1>arr2,arr1<arr2,arr1!=arr2,arr1==arr2)< p="">

  结果如下:

  array([ True, False, True, True, False]) array([False, False, False, False, True]) array([ True, False, True, True, True]) array([False, True, False, False, False])

  其中all()和any()返回的也是bool类型的结果,any()表示只要有一个True 就返回 True,all()表示所有为True 就返回 True

  display(np.all(arr1),np.any(arr2))

  逻辑运算符的使用:

  np.all(arr1<0) & np.all(arr2>0)

  数组的链接(拼接、组合)和拆分

  np.concatenate 对多个数组按指定轴的方向进行连接。

  np.stack / np.vstack / np.hstack / np.dstack / np.tile 组合

  np.split / np.hsplit / np.vsplit / np.dsplit 拆分

  本文章不做具体讲解,可以参看上篇文章

  排序与去重

  np.unique( arr,return_index,return_inverse,return_counts,axis) : 返回ndarray中的元素,排除重复元素之后,并进行排序

  np.sort( ndarray) : 作为函数使用时,不更改被排序的原始arrays,返回副本

  arr = np.array([[1,2,3,4,5,5,6,6,6,8],[2,2,3,4,5,5,6,6,7,9]])

  arr = np.unique(arr)

  display(arr)

  arr1 = np.array([1,5,6,6,6,2,3,4,5])

  arr1 = np.sort(arr1)

  display(arr1)

  结果:

  array([1, 2, 3, 4, 5, 6, 7, 8, 9])

  array([1, 2, 3, 4, 5, 5, 6, 6, 6])

  改变形状与数组扁平化

  我们可以通过数组对象的reshape方法(或者np的reshape函数)来改变数组的形状。

  arr1 = np.arange(30).reshape(3, 10)

  arr2 = np.arange(30).reshape(5, -1)

  # 也可以使用

  a = np.arange(10)

  b = np.reshape(a, (2,5))

  display(b)

  我们可以通过调用ravel或flatten方法,对数组对象进行扁平化处理。

  np.ravel / ravel

  flatten

  shape, reshape, resize, ravel

  二者的区别在于,ravel返回原数组的视图,而flatten返回原数组的拷贝。

  x = np.arange(16).reshape(4, 4)

  display(x.ravel())

  display(np.ravel(x))

  display(x.flatten())

  结果:

  array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

  array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

  array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

  统计函数

  Numpy(或数组对象)具有如下常用的统计函数。

  mean / sum / prod(乘积)

  max / min / amax / amin

  argmax / argmin

  std / var

  cumsum / cumprod

  all / any

  median / percentile

  import numpy as np

  a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组

  print(np.mean(a)) # 平均值

  print(np.max(a)) # 最大值

  print(np.min(a)) # 最小值

  print(np.sum(a)) # 求和

  print(np.prod(a)) # 求积

  print(np.std(a)) # 求标准差

  print(np.var(a)) # 求方差

  print(np.median(a)) # 求中位数

  print(np.argmax(a)) # 最大值索引

 

  print(np.argmin(a)) # 最小值索引

  当然也可以指定axis进行计算,比如按照轴进行计算,比如axis=0即列轴计算

  print(np.mean(a,axis=0)) # 平均值

  print(np.max(a,axis=0)) # 最大值

  print(np.min(a,axis=0)) # 最小值

 

  print(np.sum(a,axis=0)) # 求和

  Ndarray对象属性与索引使用

  Ndarray对象的属性

  ndim ­ 维度数

  shape ­ 维度/形状

  dtype ­ 元数数据类型

  size ­ 元素个数

  itemsize ­ 返回数组元素占用空间的大小。以字节为单位

  nbytes ­ 总字节数 = size * itemsize

  T ­ 数组对象的转置视图

  flat ­ 扁平迭代器

  arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

  print(arr.ndim) #维度数

  print(arr.shape) #维度形状

  print(arr.dtype) #元数数据类型

  print(arr.size) #元素个数

  print(arr.itemsize) # 返回数组元素占用空间的大小。以字节为单位

 

  print(arr.nbytes) #返回占用空间的总长度

  Ndarray对象的切片和索引

1

  当然Numpy的方法有很多也是可以转成ndarray中的方法使用,比如统计函数

  import numpy as np

  a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组

  print(np.mean(a)) # 平均值

  print(a.mean()) # 通过ndarray对象调用mean方法

  print(np.max(a)) # 最大值

 

  print(a.max()) # 通过ndarray对象调用max方法

  import numpy as np

  a = np.random.randint(1,20,size=(4,5)) # 随机生成4行5列的数组

  print(np.mean(a)) # 平均值

  print(np.max(a)) # 最大值

  print(np.min(a)) # 最小值

  print(np.sum(a)) # 求和

  print(np.prod(a)) # 求积

  print(np.std(a)) # 求标准差

  print(np.var(a)) # 求方差

  print(np.median(a)) # 求中位数

  print(np.argmax(a)) # 最大值索引

  print(np.argmin(a)) # 最小值索引

  更多关于“Python培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。

相关文章

反欺诈中所用到的机器学习模型有哪些?

反欺诈中所用到的机器学习模型有哪些?

2023-10-14
强化学习中on-policy与off-policy有什么区别?

强化学习中on-policy与off-policy有什么区别?

2023-10-14
为什么交叉熵可以用于计算代价?

为什么交叉熵可以用于计算代价?

2023-10-14
开发网上平台的大概流程有什么?

开发网上平台的大概流程有什么?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取