Python基础之数组和向量化计算概括
发布时间:2021-11-12 11:55:58 所属栏目:教程 来源:互联网
导读:一、多维数组 1、生成ndarray (array函数) .np.array()生成多维数组 例如:import numpy as np data1=[6,7.5,8,0,1] #创建简单的列表 print(data1) arr1=np.array(data1) #将列表创建数组 print(arr1) 2、ndarry的数据类型 (1)dtype() #获取数组元素类型
一、多维数组 1、生成ndarray (array函数) .np.array()生成多维数组 例如:import numpy as np data1=[6,7.5,8,0,1] #创建简单的列表 print(data1) arr1=np.array(data1) #将列表创建数组 print(arr1) 2、ndarry的数据类型 (1)dtype() #获取数组元素类型(浮点数、复数、整数等) data=np.random.randn(2,3) #生成随机数组 print(data) print(data.shape) #返回数组的形状 print(data.dtype) (2)转化数组的数据类型:astype() astype生成一个新的数组 import numpy as np a=np.array([0.11,2.2,3]) print(a) b=a.astype(np.int) print(b) 补充:Python中type 获取数据类型 3、numpy数组算术 (1)逐元素操作 arr=np.array([[1.,2.,3.],[4.,5.,6.]]) print(arr) print(arr*arr) 4、索引与切片 (1)基础索引与切片 arr=np.arange(10) print(arr) print(arr[5:8]) arr[5:8]=12 print(arr) (2)布尔索引 names=np.array(["Bob","Joe","Will","Bob","Will","Joe","Joe",]) print(names=="Bob") #结果:[ True False False True False False False] 5、数组转置与换轴 (1)arr.T #数组转置 补充:简单的一维和二维数组的转置就是线性代数中的行列相互交换。而对于高维数组的转置: import numpy as np a = np.arange(12).reshape(2, 2, 3) #创建一个三维矩阵,由2个2*3的矩阵块组成 print(a) #结果为: [[[ 0 1 2] #运行结果:其中每个元素都有其唯一的坐标(x,y,z)例如:0的标为(0,0,0),1的坐标为:(0,1,0)........11的坐标为(1,1,2) [ 3 4 5]] [[ 6 7 8] [ 9 10 11]]] Print(a.T) #Output为:数组变为了3个2*2的矩阵了。而各元素的坐标变为:0:(0,0,0),1:(1,0,0),........11:(2,1,1)每个元素坐标的,其实该T操作等同于后面两种方法a.transpose(2,1,0)中x轴和z轴的交换以及a.swapaxes(0,2) [[[ 0 6] [ 3 9]] [[ 1 7] [ 4 10]] [[ 2 8] [ 5 11]]] (2)内积:np.dot() x.dot()等价于np.dot(x,y) arr=np.random.randn(6,3) print(arr) print(arr.T) print(np.dot(arr.T,arr)) (3)换轴:transpose() 对于高维数组,transpose()方法的参数需要得到一个由轴编号(轴编号自0开始)序列构成的元组才能对轴进行转置,只需要调换轴对应数字参数的顺序就可以将数组进行轴的变换。 arr=np.arrange(16).reshape((2,2,6)) arr.transpose((1,0,2)) #将第二个轴和第一个轴变换位置 运行结果为:[[[ 0 1 2 3] [ 8 9 10 11]] [[ 4 5 6 7] [12 13 14 15]]] Swapaxes方法,直接进行轴的交换 二、函数 1、一元通用函数 (1)平方根 sqrt() arr=np.arange(10) print(arr) print(np.sqrt(arr)) (2)自然指数值 exp() print(np.exp(arr)) (3)返回数组的小数部分和整数部分 modf() arr=np.random.randn(7)*5 print(arr) remainder,whole_part=np.modf(arr) print(remainder) print(whole_part) 2、二元通用函数 (1)最大值 maximum() x=np.random.randn(8) print(x) y=np.random.randn(8) print(y) print(np.maximum(x,y)) 3、矩阵分解的标准函数集 ??? (1)、numpy.linalg() (1.1)、方阵的逆矩阵 inv() (1.2)、QR分解 qr() from numpy.linalg import inv,qr x=np.random.randn(5,5) print(x) mat=x.T.dot(x) #内积 print(inv(mat)) #求逆 q,r=qr(mat) print(r) 4、随机数生成器 numpy.random() 注意:产生随机数random.randn()和random.rand(n)的区别random.randn(n)是从标准正态分布中返回一个或者多个样本值,random.rand(n,m)表示由位于(0,1)中的随机数填充的n*m的矩阵。 三、数组编程 1、将条件逻辑作为数组操作 where() xarr=np.array([1.1,1.2,1.3,1.4,1.5]) yarr=np.array([2.1,2.2,2.3,2.4,2.5]) cond=np.array([True,False,True,True,False]) #是否是x的值 result=np.where(cond,xarr,yarr) print(result) #result([1.1,2.2,1.3,1.4,2.5]) 2、数学和统计方法 mean()平均值、sum()求和、cumsum()#从0元素来累计和、cumprod() # 从1元素来累计积 ??? arr=np.random.randn(5,4) print(arr) print(arr.mean()) #取总均值 print(np.mean(arr)) print(arr.mean(axis=1)) #按列数取均值 print(arr.mean(1)) 3、布尔值数组的方法 any() all() ??? print(arr.sum(0)) #从0元素来是加总 arr=np.array([[0,1,2],[3,4,5],[6,7,8]]) print(arr) print(arr.cumsum(axis=0)) #axis=0行数加总 print(arr.cumprod(axis=1)) #axis=1列数加总 bools=np.array([False,False,True,False]) print(bools.any()) #至少有一个 print(bools.all()) #全部都是 4、计算唯一值并排序:unique() ints=np.array([3,3,3,2,2,1,1,4,4]) print(np.unique(ints)) #唯一值 结果:[1 2 3 4] ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |