返回顶部
首页 > 资讯 > 后端开发 > Python >我的Python分析成长之路8
  • 583
分享到

我的Python分析成长之路8

成长之路Python 2023-01-30 23:01:50 583人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Numpy数值计算基础   Numpy:是Numerical python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用作高效的多维数据容器,可用于存储和

Numpy数值计算基础

  Numpy:是Numerical python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用作高效的多维数据容器,可用于存储和处理大型矩阵。Numpy的数据容器能够保存任意类型的数据,这使得Numpy可以无缝并快速地整合各种数据。Numpy本身并没有提供很多高效的数据分析功能。理解Numpy数组即数组计算有利于更加高效地使用其他如pandas等数据分析工具。

  Numpy提供了两种基本的对象:ndarray(多维数组对象)和ufunc(通用函数)

1.数组属性:

      ndim:返回int 。数组的维度

      shape:返回tuple。表示数组的尺寸,对于n行m列的矩阵,形状为(m,n)

      size:返回int。表示数组的元素整数,等于数组形状的乘积

      dtype:返回data-typle。描述数组中元素的类型

      itemsize:返回int。表示数组中每个元素的大小(以字节为单位)

        

1 import numpy as np
2 arr1 = np.arange(9).reshape(3,3)
3 print("创建数组:",arr1)
4 print("数组的维度:",arr1.ndim)
5 print("数组的尺寸(形状):",arr1.shape)
6 print("数组的数据类型:",arr1.dtype)
7 print("数据元素个数:",arr1.size)
8 print("数据每个元素大小:",arr1.itemsize)

2.数组创建

    一、生成多维数组最简单的方式就是使用array函数,array函数接受任意的序列型对象(当然也包括其他的数组)。

    基本语法法:numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)

          1.object 接受array。表示想要创建的数组.无默认

          2.dtype 接受data-type.表示数组所需的数据类型。默认为None

          3.ndmin 接受int。指定数组的最小维度。默认为None

import numpy as np
data1 = [1,2,3,4,5]
data2 = [[1,2,3,4],[5,6,7,8]]
print("生成一维数组:",np.array(data1))   #生成一维数组
print("生成二维数组:",np.array(data2))   #生成二维数组

    二、使用其他函数创建数组

      

1 import numpy as np
2 print("使用arange函数生成数组:",np.arange(0,10,1))  #左闭右开
3 print("使用linspace函数生成数组:",np.linspace(0,9,10))  #闭区间
4 print("使用logspace函数生成数组:",np.logspace(0,2,10)) #[1,100]生成10个数
5 print("使用zeros函数生成数组:",np.zeros((2,3)))  #生成二行三列全为0的数组
6 print("使用ones函数生成数组:",np.ones((2,3))) #生成二行三列全为一的数组
7 print("使用eye函数生成数组:",np.ones(3))  #生成对角线上为一的数组
8 print("使用diag函数生成数组:",np.diag([1,2,3,4]))

3.数组的数据类型

    在Numpy中,所欲数组的数据类型是同质的,即数组中的所有元素必须是一致的。这样做的好处,更容易确定数组所需要的存储空间。

    bool :用一位存储的布尔类型(True or False)

    inti:由所在平台决定其精度的整数

    int8:整数 范围为:-128~127

    int16:整数 范围为:-32768~32767

    int32:整数 范围为:-2^31~2^32-1

    int64:整数 范围为:-2^63~2^63-1

    unit8:无符号整数 范围为:0~255

    unit16:无符号整数 范围为:0~65535

    unit32:无符号整数 范围为0~2^32-1

    unit64 无符号整数 范围为0~2^64-1

    float16:半精度浮点数

    float32:单精度浮点数

    float64: 双精度浮点数

    complex64 复数 分别用32为浮点数代表实部和虚部

    complex128/comple 复数分别用64位浮点数表示实部和虚部

    np.dtype() 查看数据类型

print(np.float(32))   #整形转化为浮点型
print(np.int(42.0))  #浮点型转化为整形
print(np.bool(42))  #整形转化为bool型
print(np.float(True))  #bool型转化为浮点型

4.生成随机数

    Numpy提供了强大的生成随机数的功能,但使用的都是伪随机数.random 是最常见的生成随机数的方法.

1 print("生成随机数:",np.random.random())
2 print("生成均匀分布的随机数",np.random.rand(10,5))
3 print("生成正态分布的随机数",np.random.randn(10,5))
4 print("生成给定上下限的随机数:",np.random.randint(0,10,size=[5,2]))
5 print("生成二项分布随机数:",np.random.binomial(10,0,(2,3)))
6 print("生成beta分布随机数:",np.random.beta(0.2,0.3,(2,3)))
7 print("生成卡方分布随机数:",np.random.chisquare(10,[5,2]))
8 print("生成gamma分布随机数:",np.random.gamma(10,1,(5,2)))
9 print("生成任意期间均匀分布随机数:",np.random.unifORM(0,10,(5,2)))

5.通过索引访问数组

    1.一维数组的索引

    一维数组的索引比较简单,与Python中list的索引方法类似:如果你传递一个数值给数组的切片,数值会被传递给整个切片。区别于Python的内建列表,数组的切片是原数组的视图。这意味着数据并不是被复制,任何对于视图的修改都会反映到原数组上。

    

1 arr1 = np.arange(10)
2 print(arr1[1])  #获得索引为1的值
3 print(arr1[1:3])  #获得索引为1,2的值
4 arr1[2:4] = 12
5 print(arr1)   #[ 0  1 12 12  4  5  6  7  8  9] 获得
6 x = arr1[1:3].copy()   #如果不想要获得是一份视图的话,就用显示的复制这个数组 .copy()
7 print(arr1)

    2.多维数组的索引

     多维数组的每一个维度都有一个索引,各个维度的索引之间用逗号隔开,或分两个括号

1 arr= np.arange(9).reshape(3,3)
2 print(arr[0][2])    #2
3 print(arr[0,2])     #2 这两种方式访问等价
4 print(arr[1:,1:]) #第二、三行,第二、三列
5 print(arr[:2,2])  #前两行,第三列
6 arr2 = np.array([[[1,2,3],[4,5,6]],[7,8,9],[10,11,12]])
7 print(arr2[0])   #[[1, 2, 3], [4, 5, 6]]
8 print(arr2[0][0]) #[1, 2, 3]

    3.布尔索引 

1 names = np.array(["A","B","C","D","E","F"])
2 data = np.random.randn(6,4)
3 print(names=="B")   #[False  True False False False False]
4 print(data[names=='B'])   #在索引数组中引入布尔数组  选择names=="B"的行
5 print(data[names=='B',2:])     #names ="B" 的后两列

6.改变数组的形态

  在对数组进行操作时,经常需要改变数组的维度。在Numpy中,常用reshape函数改变数组的“形状”,也就是改变数组的维度。参数为一个正整数元组,分别指定数组在每个维度上的大小,reshape函数在改变原始数据形状的同时不改变原始数据。如果指定的数据和数组的元素不吻合,则函数将抛出异常。

  使用ravel()、flatten()完成展开工作,使用hstack()、vstack() 、concatenate完成组合操作,使用hsplit、vsplit、dsplit、split完成分割操作,可以将数组分割成相同大小的子数组,也可以指定原数组中需要分割的位置。

  

 1 arr = np.arange(12)
 2 print("创建一维数组:",arr)
 3 print("新的数组:",arr.reshape(3,4))   #返回(3,4)的数组
 4 print("数组的维度:",arr.ndim)   #查看数组的维度 2
 5 arr2 = np.arange(12).reshape(3,4)
 6 print("创建的二维数组:",arr2)
 7 print("使用ravel展平:",arr2.ravel())  #获得一维数组[ 0  1  2  3  4  5  6  7  8  9 10 11]
 8 print("使用flatten横向展开:",arr2.flatten())   #横向展开 [ 0  1  2  3  4  5  6  7  8  9 10 11]
 9 print("使用flatten纵向展开:",arr2.flatten("F"))  #纵向展开,[ 0  4  8  1  5  9  2  6 10  3  7 11]
10 arr3 = arr2 *3
11 print("使用hstack完成横向组合:",np.hstack((arr2,arr3)))  #横向组合
12 print("使用vstack完成纵向组合:",np.vstack((arr2,arr3)))  #纵向组合
13 print("使用concatenate完成纵向组合操作",np.concatenate((arr2,arr3),axis=0))   #沿着纵向组合
14 print("使用concatenate完成横向组合操作",np.concatenate((arr2,arr3),axis=1))  #沿着横向组合
15 print("横向分割:",np.hsplit(arr2,2))   #使用hsplit完成横向分割
16 arr4 = np.arange(16).reshape(4,4)
17 print("纵向分割:",np.vsplit(arr4,2))  #使用vstack完成纵向分割  必须保证分割后相同大小
18 print("横向分割:",np.split(arr4,axis=1))  #完成横向分割
19 print("纵向分割:",np.split(arr4,axis=0))  #完成纵向分割

7.创建numpy矩阵

    在Numpy中,矩阵是ndarray的子类,在Numpy中,数组和矩阵有着重要的区别.Numpy中提供了两个基本的对象:一个N维数组对象和一个通用函数对象。其他对象在它们之上构建的。矩阵是继承自Numpy数组对象的二维数组对象。矩阵也是二维的

    使用mat、matrix、bmat函数构建矩阵和矩阵的操作

 mat1 = np.mat("1 2 3;2 3 4;3 4 5")
print("使用mat创建的矩阵:",mat1)
mat2 = np.matrix([[1,2,3],[2,3,4],[3,4,5]])
print("使用matrix创建的矩阵:",mat2)
mat3 = np.bmat("mat1;mat2")
print("使用bmat创建的矩阵:",mat3)
mat4 = mat1*3
print("矩阵与数相乘:",mat4)
mat5 = mat1+mat2
print("矩阵相加结果:",mat5)
mat6 = mat2 - mat1
print("矩阵相减结果:",mat6)
mat7 = mat1 * mat2 #等价于mat1@mat2
print("矩阵与矩阵相乘:",mat7) #相当于求内积
mat8 = np.multiply(mat1,mat2)
print("矩阵对应元素相乘:",mat8)
print("矩阵的转置:",mat1.T) #相当于mat1.T
print("矩阵的共轭转置:",mat1.H)
print("矩阵的逆矩阵:",mat1.I)
print("矩阵的一个视图:",mat1.A)

8.ufunc函数

    ufunc函数全称为通用函数,是一种能够对数组中的所有元素(逐元素)进行操作的函数。ufunc是针对数组进行操作的,并且都以Numpy数组作为输出,因为不需要对数组中的每个元素进行操作。

    一元通用函数:

          add、fabs 逐元素计算整数、浮点数或复数的绝对值

          sqrt:计算每个元素的平方根

          square:计算每个元素的平方

          exp:计算每个元素的自然指数值

          log :计算对数

          ceil:计算每个元素的最高整数值  (大于等于这个数的最小整数)

          floor :计算每个元素的最小整数值(小于等于这个数的最大整数)

          sign:计算每个值的符号值:1(正数) 0(0)-1(负数)

     二元通用函数:

          add(+):将对应元素相加   

          subtract(-):在第二个数组中,将第一个数组中包含的元素去掉      

          multiply(*) :将属组中对应的元素相乘     *

          divide(/),floor_diveide 除或整除

          power(**):将第二个数组的元素作为第一个数组对应元素的幂次方

          maximum,fmax 逐个元素计算最大值,fmax忽略NAN

          minimun,fmax:逐个元素计算最小值,fmin忽略NAN

          mod:按元素的求模计算(求除法的余数)

1 x = np.array([1,2,3])
2 y = np.array([4,5,6])
3 print("数组相加的结果:",np.add(x,y))   #相当于+   [5 7 9]
4 print("数组相减的结果:",np.subtract(x,y))  #相当于- [-3,-3,-3]
5 print("数组相乘的结果:",np.multiply(x,y))  #相当于* [ 4 10 18]
6 print("数组相除的结果:",np.divide(x,y)) #相当于/ [0.25 0.4  0.5 ]
7 print("数组幂运算结果:",np.power(x,y))  #相当于** [  1  32 729]
8 print("数组求最大值:",np.maximum(x,y))   #求x,y中数组元素的最大值
9 print("数组求模:",np.mod(x,y))  #相当于%

9.ufunc函数的广播机制

    广播是指不同形状的数组之间执行算术运算的方式、当使用ufunc函数进行数组计算时,ufunc会对两个元素对应元素进行计算。进行这种操作的前提是两个数组的shape一样。当两个数组shape不一样时,Numpy就会执行广播机制。需要遵循四个原则:(1)让所有的输入数组向其中shape最大的数组看齐,shape中不足的地方通过在前面补1.

(2)输出数组的shape是输入数组shape的各个轴上的最大值.(3)如果输入数组的某个轴和输出数组的对应轴的长度相同或者长度为一,则这个数组能够用来计算,否则出错.

(4)当输入数组的某个轴长度为1时,沿着此轴运算时使用此轴上的第一组值。

1 arr1 = np.array([[0,0,0],[1,1,1],[2,2,2]])
2 arr2 = np.array([1,2,3])
3 print(arr1+arr2)
4 arr3 = np.array([[0,0,0],[1,1,1],[2,2,2]])
5 arr4= np.array([1,2,3]).reshape(3,1)
6 print(arr3+arr4)

 10、利用Numpy进行统计分析

    1.读、写文件:

    Numpy文件的读/写主要有二进制的文件读/写和文件列表形式的数据读/写两种形式.save函数主要以二进制的格式保存数据,load函数从二进制的文件中读取数据

    基本语法:np.save(file,arr,allow_pickle=True,fix_imports=Trues) file为文件名称,arr表示需要保存的数据,如果需要保存多个数组至一个文件中,可以使用savez函数

        data = np.load(file)   从二进制文件中获取数据

        np.savetxt(file,X,delimeter=' ,')需要保存数据至文本中,file表示文件名,X表示保存的数据,delimeter表示分隔符。

        np.loadtxt(file)  从文本中获取数据

    2.简单的统计分析

    

 1 import numpy as np
 2 arr1 = np.array([1,3,4,8,6])
 3 np.sort(arr1)  #对arr1进行排序
 4 arr2= np.random.randint(1,9,(3,3))
 5 arr2.sort(axis=1)   #对arr2列向排列
 6 print(arr2)
 7 arr2.sort(axis=0)  #对arr2进行横向排列
 8 arr3 = np.array([1,1,2,5,3,6,4,6,6,8])
 9 print(np.unique(arr3))   #相当于 np.sort(set(arr3)) ,对arr3进行去重并排序
10 print(np.tile(arr1,3))   #对整个arr1数组进行复制,3 代表3次
11 print(np.repeat(arr1,2,axis=0))   #对arr1中的元素进行横向复制2次
12 print(np.repeat(arr1,2,axis=1))  #对arr1中元素进行列向复制2次
13 print("arr1数组的和:",np.sum(arr1))   #计算数组的和
14 print("arr2数组列向的和",np.sum(arr2,axis=0))  #计算arr2列向的和
15 print("arr2数组横向的和",np.sum(arr2,axis=1))  #计算arr1横向的和
16 print("arr1数组的平均值:",np.mean(arr1))  #计算数组的平均值
17 print("arr2数组的纵向的平均值",np.mean(arr2,axis=0))  #计算列向的平均值
18 print("arr2数组的横向平均值:",np.mean(arr2,axis=1))  #计算横向的平均值
19 print("方差:",np.var(arr1))  #计算arr1的方差
20 print("标准差:",np.std(arr1))  #计算arr1的标准差
21 print("数组的最大值",np.max(arr1))  #计算arr1的最大值
22 print("数组的最小值:",np.min(arr1))  #计算arr1的最小值
23 print("最大值的索引:",arr1)  #返回最大值的索引
24 print("最小值的索引:",arr1)  #返回最小值的索引
25 print("累计求和:",np.cumsum(arr1))  #累计求和
26 print('累积:',np.cumprod(arr1))  #累乘
View Code

11线性代数

    

 1 import numpy as np
 2 arr1 = np.array([[1,2,3],[2,3,4]])
 3 arr2 = np.array([[1,2],[2,3],[3,4]])
 4 print(arr1@arr2)  #点乘积
 5 print(np.dot(arr1,arr2))  #点乘积
 6 print(arr1*arr1)#逐元素乘积
 7 arr3 = np.array([[1,2,3],[2,3,4],[5,6,7]])
 8 print(np.linalg.inv(arr3))  #inv  求逆矩阵
 9 print(np.diag(arr3))     #将方阵的对角线元素以一元数组的形式返回
10 print(np.trace(arr3))  #计算对角线元素的和
11 print(np.linalg.det(arr3))  #计算矩阵的行列式
12 x,y = np.linalg.eig(arr3) #计算方针的特征值和特征矩阵
13 print(x) #x 特征值,y特征向量
14 print(np.linalg.qr(arr3))  #计算qr分解
15 print(np.linalg.svd(arr3))  #计算svd分解
16 #np.linalg.solve(a,b)  #求解方程
17 # np.linalg.lstsq(a,b)  #计算最小二乘
View Code

 

--结束END--

本文标题: 我的Python分析成长之路8

本文链接: https://lsjlt.com/news/180804.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 我的Python分析成长之路8
    Numpy数值计算基础   Numpy:是Numerical Python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用作高效的多维数据容器,可用于存储和...
    99+
    2023-01-30
    成长之路 Python
  • 我的Python分析成长之路7
    类 一、编程范式:        1.函数式编程   def       2.面向过程编程   (Procedural Programming)         基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成...
    99+
    2023-01-30
    成长之路 Python
  • 我的Python分析成长之路9
    pandas入门 统计分析是数据分析的重要组成部分,它几乎贯穿整个数据分析的流程。运用统计方法,将定量与定性结合,进行的研究活动叫做统计分析。而pandas是统计分析的重要库。 1.pandas数据结构     在pandas中,有两个常...
    99+
    2023-01-30
    成长之路 Python
  • 我的Python分析成长之路10
    matplot数据可视化基础   制作提供信息的可视化(有时称作绘图)是数据分析中最重要任务之一。 1.图片(画布)与子图     plt.figure :创建一张空白的图片,可以指定图片的大小、像素。     figure.add_su...
    99+
    2023-01-30
    成长之路 Python
  • 我的Python分析成长之路3
    一 集合                                                                                                                   ...
    99+
    2023-01-30
    成长之路 Python
  • 我的Python成长之路—03
    1.文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。 Linux文件或者目录名称最长可以有...
    99+
    2023-01-31
    成长之路 Python
  • python-成长之路
    一系列python方面有价值的参考/跟python有关的东西http://www.path8.net/tn/archives/6017ToolsPyCharm – 来自JetBrains的强大的IDEPython Tools for Vis...
    99+
    2023-01-31
    成长之路 python
  • Python成长之路第二篇(3)_字典的
    字典的置函数用法(字典dict字典中的key不可以重复)class dict(object):"""dict() -> new empty dictionarydict(mapping) -> new dictionary in...
    99+
    2023-01-31
    字典 第二篇 成长之路
  • 我的Python学习之路
    从今天起开始记录我的Python学习之路。 现在的我只是一个学习Linux服务器的大三学生党,在大学中不断的学习是必要的,学习完了写技术博客也是必要的,不管有没有人看,这对于自己来说都是有好处的。 最近发现Python这个强大的语言,就如它...
    99+
    2023-01-31
    之路 Python
  • Python成长之路第一篇(3)_初识字
    经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之为键值对,也就是由(键,值)组成映射关系...
    99+
    2023-01-31
    第一篇 成长之路 Python
  • Python数据分析:数据驱动成功之路
    Python 数据分析涉及使用 Python 编程语言从各种数据源中收集、清理、探索、建模和可视化数据。它提供了强大的工具和库,例如 NumPy、Pandas、Scikit-learn 和 Matplotlib,使研究人员和分析师能够高...
    99+
    2024-02-17
    Python 数据分析 数据探索 数据建模 可视化 成功
  • DBA成长之路---mysql主从同步,读写分离
    主从同步什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据。        1 添加授权用户&...
    99+
    2024-04-02
  • 我是如何入门、成长并进阶为数据分析师的?
    前几天和一朋友A聊天,一个在我看来完全可以在大部分行业领域公司独当一面的数据分析师,目前仍谦虚的以“数据猿”自称。从事数据分析的他,半路出家,起初虽然懂一些数据库的知识,但仍然和很多人一样,艰难地上了路。于...
    99+
    2024-04-02
  • 一个十年JAVA老程序员成长之路分享
    我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉撒玩各种贷款信用卡 不为金钱过于发愁了。...
    99+
    2023-06-02
  • 做了8年前端,感谢那些优秀的后端,陪伴我工作,教会我成长
    ☆ 前段时间由于一时的头脑发热,写了一篇《做了8年前端,细说那些曾经让你浴霸不能的后端》的博客,虽然每个细节也都属实吧,但始终是一些负能量的东西,建议大家不要去看了,今年互联网情况已经这样了,就不要再去怀念那些不美好了 ☆ 干了这么多...
    99+
    2023-09-10
    前端 java 后端 python 开发语言
  • 从0到1之php反序列化的成长之路
    简介 好好学习,天天向上 反序列化漏洞,是比较难搞定的漏洞,因为想要玩转反序列化漏洞,就要懂编程懂语言懂逻辑,抛开了开发,反序列化如纸上谈兵,看完了B站蜗牛学苑的php反序列化课程,深有感触,一定要总...
    99+
    2023-09-01
    php web安全 反序列化
  • 网站渗透测试公司的成长之路
    伴随着我的客户圈慢慢扩展,我的薄弱点也更加突显,例如我长期性摸着内部网,对外部网不太熟,对传统式的安全研究评估也拿捏不准确,一个详细的安全新项目自己压根担负不了。为填补外网地址工作经验和安全研究评估工作经验上的缺点,我下定决心要为自己换一份...
    99+
    2023-06-03
  • 【LeetCode算法成长之路】滑动窗口算法总结与经典题目分析
    前言 本文小新为大家带来 滑动窗口算法 相关知识,经过对滑动窗口算法类题目的总结,为大家分享滑动窗口算法概述(包括:滑动窗口算法思想,滑动窗口算法使用场景,滑动窗口算法使用思路),滑动窗口算法代码模...
    99+
    2023-09-08
    算法 leetcode java
  • 【LeetCode算法成长之路】Java字符串相关类总结与经典题目分析
    前言 本文小新为大家带来 Java字符串相关类总结与经典题目分析 相关知识,具体内容包括不可变字符序列String介绍(包括:String 的特性,String 的构造器,String 与其他结构间...
    99+
    2023-09-10
    java 算法 leetcode
  • MySQL 8新特性之Invisible Indexes的示例分析
    小编给大家分享一下MySQL 8新特性之Invisible Indexes的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作