Python | Numpy入门(1)_笔记

Python学习(1)

知识点1

  1. 列表、集合、数组类型表示数据
  2. 列表中每一个数据的数据类型可以存在不同。数组要求每一个元素的类型是相同的
  3. 二维数据是一维数据组合形式
  4. 表格是典型的二维数据
  5. 高维数据是通过最基本的二元关系表示数据间的复杂结构

知识点2
6. 一维数据可以使用列表(有序)和集合类型(无序)

  1. 二维和多维数据用列表类型(多维列表代表多维数据)

  2. 高维数据用字典或者数据表示格式:

    dict={
    
    "A"="aa"
    
    }
    

Numpy简介

  1. 表示n维数组对象:ndarray

  2. 线性代数、傅里叶变换、随机数生成

  3. 引用:import numpy as np

  4. 例子:计算 A 2 + B 3 A^2+B^3 A2+B3,其中 A A A B B B是一维数组

    #普通写法
    def pysum():
        a=[0,1,2,3,4]
        b=[9,8,7,6,5]
        c=[]
        
        for i in range(len(a)):
            c.append(a[i]**2+b[i]**3)
        return c
    print(pysum())
        
    
    #使用numpy计算
    import numpy as np
    def npsum():
        a=np.array([0,1,2,3,4])
        b=np.array([9,8,7,6,5])
        c=a**2+b**3
        return c
    print(npsum())
    
    1. 提供数组对象提高计算速度(底层C语言)
    2. 科学计算中,一个维度所有的数据的数据类型往往是相同的。(数组对象采用相同的数据类型更好)
    3. ndarray是一个多维数组对象,包括实际的数据描述这些数据的元数据(维度、类型等)。要求类型相同下标从0开始
    4. np.array()输出为[],元素由空格分开。
    5. 轴(维度)和秩(.ndim)(维度的数量)、ndarray对象的尺度(.shape)(如矩阵,n行m列)、元素个数(.size)(如上述n*m)、ndarray对象的元素类型(.dtype)、ndarray对象中每个元素的大小(.itemsize)(以字节为单位,方便计算ndarray占用的内存空间)
    a=np.array([[0,1,2,3,4],
              [9,8,7,6,5]])
    a.ndim
    >2
    #代表有两维
    
    a.shape
    >(2,5)
    #代表是2行5列
    
    a.dtype
    >'int 32'
    #是ndarray自定义的类型
    
    a.itemsize
    >4
    
    
    1. python仅支持整数、浮点数和复数三种类型。
    2. ndarray也可以由非同质对象构成,非同质ndarray认为每一个不同类型的元素都是一个对象,都是对象类型‘o’,无法发挥使用numpy优势,需要避免使用。(同质即本质相同,非同质则不同,此处应该指的是类型不同)。

    创建ndarray数组

    1. 从python的列表、元组。
#从列表或者元组创建ndarray(列表是[],元组是(),列表可以更改而元组不可更改)
x=np.array(list/tuple)
#用dtype指定元素类型
x=np.array(list/tuple,dtype=np.float32)

#不指定dtype时会自动根据数据创建相关度最高的类型定义
  1. 从numpy中的函数创建。(如arange、ones、zeros等)
np.arange(n)
#返回ndarray类型,元素从0到n-1(不指定为整数类型)

np.ones(shape)
#根据shape生成一个全1数组,shape为元组类型。eg:生成一个两行三列的数组,shape:(2,3),(不指定为浮点数类型),shape从左到右是最外层到最内层的。
       
np.zeros(shape)
#同理,(不指定为浮点数类型)
    np.full(shape,val)
   #根据shape生成一个数组,每个值都是val,(不指定为浮点数类型)
   
   np.eye(n)
   #创建一个n*n的矩阵,对角线为1,其余均为0(正定矩阵),(不指定为浮点数类型)
   
   np.ones_like(a)
   #根据数组a的形状生成全1数组
   
   np.zeros_like(a)
   np.full_like(a,val)
   #同理
   
   np.linspace()
   #eg:
       a=np.linspace(1,10,4)//1代表起始位置,第二个参数是最后一个元素的值,4代表共有四个元素。
       >a=([1.,4.,7.,10.])
       b=np.linspace(1,10,4,endpoint=False)//置为False时不作为最后一个值出现。
       >b=([1.,3.25,5.5,7.75])
       
   np.concatenate()
   #将两个或者多个数组合并为新的数组
  1. 从字节流(raw bytes)中创建。
  2. 从文件中读取特定的格式,创建ndarray数组。
  3. 创建后的ndarray数组可以进行维度和元素变换
a.reshape(shape)
#不改变数组元素,返回一个shape形状的数组,原数组不变。

a.resize(shape)
#和reshape一致,但是是直接修改原数组

a.swapaxes(ax1,ax2)
#将数组中n个维度中两个维度进行调换

a.flatten
#对数组进行降维,返回折叠后的一维数组,而原数组不变。

new_a=a.astype(new_type)
#返回一个新的数组

b=a.tolist()
#从数组转换为列表
#由于列表是最原始的数据类型,比numpy慢很多,但是适合于原生程序计算。
#eg:

a=np.ones((2,3,4),dtype=np.int32)
#不写32也可以,会自动判断是int64还是int32

a.reshape((3,8))
#需要保证两边总数一样,如3*8=2*3*4

b=a.astype(np.float)#float同理
>b
#会生成一个浮点型的数组
#这里astype一定会生成一个新的数组(原来版本的copy)

数组的索引和切片

  1. 索引是获取数组中特定位置元素的过程

    a=np.array([9,8,7,6,5])
    
    #索引,从0开始
    a[2]
    
  2. 切片是获取数组中元素子集的过程(在数组中找到一组数据)

    a=np.array([9,8,7,6,5])
    
    a[1:4:2]
    #第一个元素为开始的编号,第二个为终止的编号(索引中无终止编号),第三个元素为步长,即从1到4步长为2的元素,如1、3,对应为8、6,此命令得到的切片为[8,6]
    
  3. 多维数组的索引:

    a=np.arange(24).reshape((2,3,4))
    #生成一个维度为(2,3,4),从0开始到23的一个数组
    
    a
    >([[[0,1,2,3],
    	[4,5,6,7],
    	[8,9,10,11]],
    	
    	[[12,13,14,15],
    	[16,17,18,19],
    	[20,21,22,23]]])
    
    a[1,2,3]
    >23
    
    a[-1,-2,-3]
    >17
    #-1表示数组最后一个元素值,-2表示倒数第二个,-3表示倒数第三个
    
  4. 多维数组的切片:

    a[:1,-3]
    >[5,17]
    #选取一个维度用:,此处表示不论维度是哪一个(即第一个维度都要),然后取满足第二个维度的1和第三个维度的-3的那个值(有几个第一维就有几个值)。
    
    a[:,1:3,:]
    >{[[4,5,6,7],[8,9,10,11]],[[16,17,18,19],[20,21,22,23]]}
    #第一个和第三个个维度遍历,取第二个维度的1~3个。
    
    a[:,:,::2]
    >[[[0,2],
      [4,6],
      [8,10]],
     [[12,14],
     [16,18],
     [20,22]]]
    #通过步长进行切片,从第一个元素开始算起
    

    数组的运算

    1. 数组与标量之间的运算:数组中每一个元素都要与标量进行计算。
#此处a与前同:

a.mean()
>11.5
#取均值使其变成标量

a=a/a.mean()
a
>三层数组
#每一个值都除了
  1. 数组的计算公式:
#这里x为数组。且运算时数组本身不发生变化,而是copy了一个运算版本。
  
np.abs(x)、np.fabs(x)
#计算数组各元素的绝对值
  
np.sqrt(x)
#计算数组各元素的平方根
  
np.square(x)
#计算数组各元素的平方
  
np.log(x)、np.log10(x)、np.log2(x)
#计算数组各元素的自然对数、以10为底的对数和2为底的对数
  
np.ceil(x)、np.floor(x)
#计算数组各元素的ceiling(不超过元素的整数值)值或floor(小于这个元素的最大整数值)值
  
np.rint(x)
#计算数组的各元素的四舍五入值
  
np.modf(x)
#将数组各元素的小数和整数部分以两个独立数组形式返回
  
np.cos(x)、np.cosh(x)、np.sin(x)、np.sinh(x)、np.tan(x)、np.tanh(x)
#计算数组各元素的普通和双曲三角函数
  
np.exp(x)
#计算数组的各元素的指数值
  
np.sign(x)
  #计算数组各元素的符号值,即当值为正数时返回1,负数返回-1,0即返回0。

3.numpy的二元函数:

+-*/**
#加、减、乘、除、乘方(均是两个数组各元素对应运算)
   
np.maximum(x,y)、np.fmax()
#返回元素的最大值(本质是一个运算,当数据类型不同的时候会生成浮点数)
   
np.minimum(x,y)、np.fmin()
#返回元素的最小值(本质是一个运算,当数据类型不同的时候会生成浮点数)
   
np.mod(x,y)
#对元素级进行模运算
   
np.copysign(x,y)
 #将数组y中各元素的元素值的符号赋值给数组x对应的元素
   
><>==<==!=
#算术比较且产生一个布尔型的数组(相同规模但是由TRUE和FALSE构成)

karency_2021.10.10
源:北京理工大学嵩天

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值