Python

您所在的位置:网站首页 python创建矩阵numpy Python

Python

#Python| 来源: 网络整理| 查看: 265

Numpy中array(数组)

Numpy主要对象是齐次多维数组,由正整数元组索引,Numpy中维度称为轴(axis),数组的维数称为秩(rank)。 Array/Series/DataFrame对比学习

可以参考:Numpy快速入门 Numpy基本特点及常用操作

1.1 创建数组

常规方法创建数组

import numpy as np #一维数组 a=np.array([2,3,4]) b=np.array([2.,3.,4.]) #二维数组 c=np.array([[1.,2.],[3.,4.]]) d=np.array([[1,2],[3,4]],dtype=complex) print(a,a.dtype) print(b,b.dtype) print(c,c.dtype) print(d,d.dtype) >>>[2 3 4] int64 >>>[2. 3. 4.] float64 >>>[[1. 2.] [3. 4.]] float64 >>>[[1.+0.j 2.+0.j] [3.+0.j 4.+0.j]] complex128

利用函数创建数组 arange/ones/zeros/linspace/random.randint

#创建数组的常用函数 np.arange(0,7,1,dtype=float) #arange函数创建 >>>array([0., 1., 2., 3., 4., 5., 6.]) np.ones((2,3,4),dtype=int) #创建2页3行4列的数据 >>>array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]]) np.zeros((2,3,4)) #创建2页3行4列的零矩阵 >>>array([[[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]], [[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]]) np.linspace(-1,2,5) #起点为-1,终点为2,取5个数 >>>array([-1. , -0.25, 0.5 , 1.25, 2. ]) np.random.randint(-9,3,(2,3)) #生成两行三列,大小为[-9,3)之间(左闭右开)的随机整数 >>>array([[-4, -8, -9], [-4, -9, 1]]) 1.2 修改数据

单个赋值/批量赋值/遍历赋值

#一维数组 a=np.arange(0,10,1)**2 >>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) a[-1]=100 #单个赋值 >>>array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 100]) a[1:4]=100 #批量赋值 >>>array([ 0, 100, 100, 100, 16, 25, 36, 49, 64, 100]) b=[np.sqrt(np.abs(i)) for i in a] #通过a循环遍历赋值 print(b) >>>[0.0, 10.0, 10.0, 10.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0] 1.3 数组输出 从左到右,从上到下一维数组输出为行,二维数组输出为矩阵,三维数组输出为矩阵列表 1.4 基本运算

数值运算&矩阵运算 元素级运算(一维数组):加减/乘/平方/判断/三角函数等

a=np.arange(1,5,1) b=np.array([0,1,2,3]) a-b #对应相减 >>>array([1, 1, 1, 1]) a*b #对应相乘 >>>array([ 0, 2, 6, 12]) a**2 #求平方 >>>array([ 1, 4, 9, 16]) np.sin(a)*5 #三角函数 >>>array([ 4.20735492, 4.54648713, 0.70560004, -3.78401248]) a>3 #判断值 >>>array([False, False, False, True]) np.exp(a) #指数 >>>array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003])

统计计算

#均值 a=np.random.randint(0,5,(2,3)) print(a.sum(),a.sum(0),a.sum(axis=0)) #分别对矩阵和列求和 print(a.mean(),a.min(1),a.std(1)) #分别对矩阵和行求均值、最小值及标准差 np.median(a) #求中位数 >>>13 [3 5 5] [3 5 5] >>>2.1666666666666665 [1 2] [0. 0.94280904] >>>1.5

矩阵运算(二维数组)

a=np.array([[1,2],[3,4]]) b=np.arange(6).reshape(2,-1) #生成2行矩阵 print(a,'\n',b) a.dot(b) #矩阵的乘法 >>> [[1 2] [3 4]] [[0 1 2] [3 4 5]] array([[ 6, 9, 12], [12, 19, 26]]) 1.5 索引/切片/遍历

数组的索引切片原理和List等类似:索引从0开始,-1代表最后一个索引;左闭右开原则

#一维数组 a=np.arange(0,10,1)**2 >>>[ 0 1 4 9 16 25 36 49 64 81] #数组的索引切片原理和List等类似:索引从0开始,-1代表最后一个索引;左闭右开原则 print(a[2],a[-1]) #取某个值 >>>4 81 print(a[-3:-1]) #切片取值 >>>array([49, 64]) #遍历输出 for i in a: print(i) >>> 0 1 4 9 16 25 36 49 64 81 #二维数组 c=np.arange(0,20,1).reshape(4,-1) print('第二行:',c[1],'\n二到四列:\n',c[:,1:4],'\n二到四行的第三列',c[1:4,2], '\n第二行:',c[1,:]) >>> 第二行: [5 6 7 8 9] 二到四列: [[ 1 2 3] [ 6 7 8] [11 12 13] [16 17 18]] 二到四行的第三列 [ 7 12 17] 第二行: [5 6 7 8 9] 1.6 形状操作 a=10*np.random.random((3,4)) #随机产生大小在0-1之间的3行4列的数 >>> >array([[1.61359796, 9.556233 , 8.80181351, 3.54740817], [6.32344717, 5.30891265, 4.84778884, 8.27223197], [3.85746314, 2.93382628, 1.62288255, 6.7528529 ]]) b=np.floor(a) #截取整数部分 >>> >array([[1., 3., 9., 2.], [2., 7., 4., 8.], [2., 7., 5., 1.]]) b.ravel() #一维化操作(一行) >>> >array([1., 3., 9., 2., 2., 7., 4., 8., 2., 7., 5., 1.]) b.shape=(6,-1) #改变形状 >>> >array([[1., 3.], [9., 2.], [2., 7.], [4., 8.], [2., 7.], [5., 1.]]) b.transpose() #转置 >>> >array([[1., 9., 2., 4., 2., 5.], [3., 2., 7., 8., 7., 1.]]) 1.7 删除 #一维数组中删除元素 a=np.arange(1,5,1) print(a) #>>>[1 2 3 4] a=np.delete(a,0) #删除a中第一个元素 print(a) #>>>[2 3 4] #二维数组中删除元素 #注:在删除里axis=0 b=np.arange(0,10,1).reshape(2,-1) print(b) #>>>[[0 1 2 3 4] # [5 6 7 8 9]] b=np.delete(b,1,axis=0) #删除b中第2行元素 print(b) #>>>[[0 1 2 3 4]] b=np.delete(b,1,2) #删除b中值为2的元素 print(b) #>>>[[0 1 3 4]] 1.8 条件判断 np.where() 用法

np.where( condition , arr1 , arr2 ):condition为真时,取arr1,反之取arr2。

#条件逻辑运算 arr=np.random.randn(4,4) arr >>> >array([[ 0.08045628, 0.07516321, -0.45422927, -0.06719862], [-0.59950239, 0.46640377, 0.77212609, 0.62769923], [ 0.28720133, 0.2913662 , 0.03102816, -1.12311734], [ 0.23945325, 0.5318206 , 0.44572582, 0.0373522 ]]) arr_new=np.where(arr>0,1,-1) arr_new >>> >array([[ 1, 1, -1, -1], [-1, 1, 1, 1], [ 1, 1, 1, -1], [ 1, 1, 1, 1]]) # 多重条件判断 arr=np.random.randint(-100,200,size=(4,5)) arr >>> >array([[ 1, -70, 79, 189, -87], [-32, -25, 13, 15, -55], [ -3, 170, -90, 156, 110], [-60, -13, 30, 122, 9]]) arr_new=np.where(arr>=100,1,np.where(arr>=0,0,-1)) arr_new >>> >array([[ 0, -1, 0, 1, -1], [-1, -1, 0, 0, -1], [-1, 1, -1, 1, 1], [-1, -1, 0, 1, 0]])

如果对于本文中代码或数据有任何疑问,欢迎评论或私信交流

相近文章: Pandas中Series用法总结 Pandas中DataFrame用法总结



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3