Python学习(1)
知识点1:
- 列表、集合、数组类型表示数据
- 列表中每一个数据的数据类型可以存在不同。数组要求每一个元素的类型是相同的
- 二维数据是一维数据组合形式
- 表格是典型的二维数据
- 高维数据是通过最基本的二元关系表示数据间的复杂结构
知识点2:
6. 一维数据可以使用列表(有序)和集合类型(无序)
-
二维和多维数据用列表类型(多维列表代表多维数据)
-
高维数据用字典或者数据表示格式:
dict={ "A"="aa" }
Numpy简介
-
表示n维数组对象:ndarray
-
线性代数、傅里叶变换、随机数生成
-
引用:import numpy as np
-
例子:计算 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())
- 提供数组对象提高计算速度(底层C语言)
- 科学计算中,一个维度所有的数据的数据类型往往是相同的。(数组对象采用相同的数据类型更好)
- ndarray是一个多维数组对象,包括实际的数据和描述这些数据的元数据(维度、类型等)。要求类型相同,下标从0开始。
- np.array()输出为[],元素由空格分开。
- 轴(维度)和秩(.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
- python仅支持整数、浮点数和复数三种类型。
- ndarray也可以由非同质对象构成,非同质ndarray认为每一个不同类型的元素都是一个对象,都是对象类型‘o’,无法发挥使用numpy优势,需要避免使用。(同质即本质相同,非同质则不同,此处应该指的是类型不同)。
创建ndarray数组
- 从python的列表、元组。
#从列表或者元组创建ndarray(列表是[],元组是(),列表可以更改而元组不可更改)
x=np.array(list/tuple)
#用dtype指定元素类型
x=np.array(list/tuple,dtype=np.float32)
#不指定dtype时会自动根据数据创建相关度最高的类型定义
- 从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()
#将两个或者多个数组合并为新的数组
- 从字节流(raw bytes)中创建。
- 从文件中读取特定的格式,创建ndarray数组。
- 创建后的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)
数组的索引和切片
-
索引是获取数组中特定位置元素的过程
a=np.array([9,8,7,6,5]) #索引,从0开始 a[2]
-
切片是获取数组中元素子集的过程(在数组中找到一组数据)
a=np.array([9,8,7,6,5]) a[1:4:2] #第一个元素为开始的编号,第二个为终止的编号(索引中无终止编号),第三个元素为步长,即从1到4步长为2的元素,如1、3,对应为8、6,此命令得到的切片为[8,6]
-
多维数组的索引:
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表示倒数第三个
-
多维数组的切片:
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]]] #通过步长进行切片,从第一个元素开始算起
数组的运算
- 数组与标量之间的运算:数组中每一个元素都要与标量进行计算。
#此处a与前同:
a.mean()
>11.5
#取均值使其变成标量
a=a/a.mean()
a
>三层数组
#每一个值都除了
- 数组的计算公式:
#这里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
源:北京理工大学嵩天