numpy一些常用函数小结
来源:互联网 发布:阿里云主机记录 编辑:程序博客网 时间:2024/05/22 15:48
最近在学numpy,学习一门新的语言总有许多的API,而这些API又杂又容易忘记,所以我把一些常用的函数记录下来以便以后随时查阅
1.np.sqrt()函数用来给一个列表中每一个元素求根号
import numpy as npimport numpy.random as np_randomarr = np.arange(10)print arr#out:[0 1 2 3 4 5 6 7 8 9]print np.sqrt(arr)#out:[ 0. 1. 1.41421356 1.73205081 2. 2.23606798 2.44948974 2.64575131 2.82842712 3. ]
2.np.maximum(x,y)函数用来求给定的两个两个列表中的对应每个元素的最大值,并返回列表
import numpy as npimport numpy.random as np_randomx = np_random.randn(8)y = np_random.randn(8)print x,y,np.maximum(x,y)#x = [-0.4628023 -0.60578152 -0.16527033 0.99371095 -1.68726145 0.28045865 0.77197354 -0.08402748] # y = [ 0.09538315 0.26688981 -0.10223 -1.40979706 1.94563655 2.24729599 1.15956752 0.83226026]# np.maximum = [ 0.09538315 0.26688981 -0.10223 0.99371095 1.94563655 2.24729599 1.15956752 0.83226026]
3.np.modf(x)函数返回两个列表一个是整数部分列表,一个是小数部分列表
import numpy as np import numpy.random as np_randomarr = np_random.randn(7) * 5print 'arr = ',arr,'np.modf = ',np.modf(arr)#arr = [ 4.66513489 1.29033991 1.48894422 -3.21496179 -1.4010007 -2.25843728 -1.97491216] np.modf = (array([ 0.66513489, 0.29033991, 0.48894422, -0.21496179, -0.4010007 ,-0.25843728, -0.97491216]), array([ 4., 1., 1., -3., -1., -2., -1.]))
4.矩阵转置函数,矩阵点积,高维矩阵坐标轴转换的一些应用
#coding:utf-8#矩阵转置import numpy as npimport numpy.random as np_randomarr = np.arange(15).reshape((3,5))#print arr[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]#print arr.T[[ 0 5 10] [ 1 6 11] [ 2 7 12] [ 3 8 13] [ 4 9 14]] #矩阵点积arr = np_random.randn(6,3)print arr,np.dot(arr.T,arr)#out:[[ 1.23173257 0.80268393 1.25454263] [-0.65430351 0.99088605 -1.26507529] [ 0.14790816 0.10454909 1.25549745] [-0.25097523 -1.42844608 0.25598424] [-1.86467754 -0.46932851 2.33760553] [ 0.58934308 0.14976993 0.41664656]] [[ 5.85449118 1.67773218 -1.61887592] [ 1.67773218 3.92024567 -1.51564661]#高维矩阵的坐标轴转换arr = np.arange(16).reshape((2,2,4))print arr[[[ 0 1 2 3] [ 4 5 6 7]] [[ 8 9 10 11] [12 13 14 15]]]print arr.transpose(1,0,2)[[[ 0 1 2 3] [ 8 9 10 11]] [[ 4 5 6 7] [12 13 14 15]]]print arr.swapaxes(1,2)[[[ 0 4] [ 1 5] [ 2 6] [ 3 7]] [[ 8 12] [ 9 13] [10 14] [11 15]]]
上面的三个函数中转置与点积应该上过高数的人都懂,关键在于坐标轴转换函数,在高维中我们称坐标轴是从第0个轴开始的因此上面的arr.transpose(1,0,2)
就表示第2个轴不懂交换第0轴和第一轴,如下所示
详细解释:
arr数组的内容为
- a[0][0] = [0, 1, 2, 3]
- a[0][1] = [4, 5, 6, 7]
- a[1][0] = [8, 9, 10, 11]
- a[1][1] = [12, 13, 14, 15]
transpose的参数为坐标,正常顺序为(0, 1, 2, … , n - 1),
现在传入的为(1, 0, 2)代表a[x][y][z] = a[y][x][z],第0个和第1个坐标互换。
- a’[0][0] = a[0][0] = [0, 1, 2, 3]
- a’[0][1] = a[1][0] = [8, 9, 10, 11]
- a’[1][0] = a[0][1] = [4, 5, 6, 7]
- a’[1][1] = a[1][1] = [12, 13, 14, 15]
arr.swapaxes(1,2)也是和上面差不多交换第一个轴和地二个轴
print arr.swapaxes(0,1)[[[ 0 1 2 3] [ 8 9 10 11]] [[ 4 5 6 7] [12 13 14 15]]]
可以看到和上面的print arr.transpose(1,0,2)一样的结果
5.数组对应的乘法、减法除法
import numpy as nparr = np.array([[1,2,3.0],[4.0,5,6]])print arr - arr[[ 0. 0. 0.] [ 0. 0. 0.]]print arr * arr[[ 1. 4. 9.] [ 16. 25. 36.]]print 1/arr[[ 1. 0.5 0.33333333] [ 0.25 0.2 0.16666667]]print arr ** 0.5[[ 1. 1.41421356 1.73205081] [ 2. 2.23606798 2.44948974]]
6.数组类型制定参数dtype与数据类型转换函数astype
#coding:utf-8print '生成数组时指定数据类型'import numpy as nparr = np.array([1,2,3],dtype = np.float64)print arr.dtype#float64arr = np.array([1,2,3],dtype = np.int32)print arr.dtype#int32print '使用astype复制数组并转换数据类型'int_arr = np.array([1,2,3,4,5])float_arr = int_arr.astype(np.float)print int_arr.dtype#int64print float_arr.dtype#float64print '使用astype将float转换为int时小数部分被舍弃'float_arr = np.array([2.4,1.4,4.5,1.5])int_arr = float_arr.astype(dtype = np.int)print int_arr[2 1 4 1]print '使用astype把字符串转换为数组,如果失败抛出异常。'str_arr = np.array(['1.2','2.4','2.3'],dtype = np.string_)float_arr = str_arr.astype(dtype = np.float)print float_arr[ 1.2 2.4 2.3]print 'astype使用其它数组的数据类型作为参数'int_arr = np.arange(10)float_arr = np.array([1.2,2.3,5.6],dtype = np.float64)print int_arr.astype(float_arr.dtype)#[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
7.数组索引的一些应用
#coding:utf-8import numpy as nparr = np.empty((8,4))for i in range(8): arr[i] = i#打印第4行,第3行,第0行,第6行数据print arr[[4,3,0,6]][[ 4. 4. 4. 4.] [ 3. 3. 3. 3.] [ 0. 0. 0. 0.] [ 6. 6. 6. 6.]]arr = np.arange(32).reshape((8,4))print arr[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]#打印arr[1][0],arr[5][3],arr[7][1],arr[2,2]print arr[[1,5,7,2],[0,3,1,2]][ 4 23 29 10]#打印选定行的对应的列print arr[[1,5,7,2]][:,[0,3,1,2]][[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]print arr[np.ix_([1,5,7,2],[0,3,1,2])][[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]
8.np.zero()函数用来生成全是0的数组与np.empty()用来生成一个空的数组(虽然可能在你电脑上使用这个函数的时候有值,值可能是0或者其它,但其实它生成的数组应该是一个空的)
import numpy as npnp.zeros(10)Out[69]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])print np.zeros((3,6))[[ 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0.]]print np.empty((2,3,2))[[[ 4. 4.] [ 4. 4.] [ 3. 3.]] [[ 3. 3.] [ 6. 6.] [ 6. 6.]]]
9.布尔索引的一些应用
import numpy as npimport numpy.random as np_randomname_arr =np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])rand_arr = np_random.randn(7,4)print rand_arr[[-1.82397798 -0.02475999 -1.05391711 -0.09195784] [ 0.58072312 -0.60623037 -0.72832453 -0.3967706 ] [-0.98425286 0.20487701 -0.50738989 -1.18534881] [-2.04733816 0.98808353 -0.25746984 -0.08985969] [-0.11875836 -0.95636464 1.41807321 0.38314495] [-0.70933744 -0.53211986 -1.58546288 0.3870686 ] [ 0.28461165 -1.22913798 2.97719825 0.47703007]]#打印对于索引为True的值也就是第0行和第3行print rand_arr[name_arr == 'Bob'][[-1.82397798 -0.02475999 -1.05391711 -0.09195784] [-2.04733816 0.98808353 -0.25746984 -0.08985969]]#打印对于的行和列print rand_arr[name_arr == 'Bob',:2][[-1.82397798 -0.02475999] [-2.04733816 0.98808353]]#打印取反的对应的行print rand_arr[~(name_arr == 'Bob')][[ 0.58072312 -0.60623037 -0.72832453 -0.3967706 ] [-0.98425286 0.20487701 -0.50738989 -1.18534881] [-0.11875836 -0.95636464 1.41807321 0.38314495] [-0.70933744 -0.53211986 -1.58546288 0.3870686 ] [ 0.28461165 -1.22913798 2.97719825 0.47703007]]mask_arr = (name_arr == 'Bob')|(name_arr == 'Will')print rand_arr[mask_arr][[-1.82397798 -0.02475999 -1.05391711 -0.09195784] [-0.98425286 0.20487701 -0.50738989 -1.18534881] [-2.04733816 0.98808353 -0.25746984 -0.08985969] [-0.11875836 -0.95636464 1.41807321 0.38314495]]rand_arr[name_arr != 'Joe'] = 7print rand_arr[[ 7. 7. 7. 7. ] [ 0.58072312 -0.60623037 -0.72832453 -0.3967706 ] [ 7. 7. 7. 7. ] [ 7. 7. 7. 7. ] [ 7. 7. 7. 7. ] [-0.70933744 -0.53211986 -1.58546288 0.3870686 ] [ 0.28461165 -1.22913798 2.97719825 0.47703007]]
10.numpy.linalg中的求逆函数inv,与qr分解
import numpy as npimport numpy.random as np_randomfrom numpy.linalg import inv,qr x = np.array([[1.0,2,3],[4,5,6]])y = np.array([[6,23],[-1,7],[8,9]])mat = x.T.dot(x)print inv(mat)x = np_random.randn(5,5)mat = x.T.dot(x)inv(mat)Out: array([[ 11.84687444, -11.56145594, -5.65725983, 10.87964992, 7.08449774], [-11.56145594, 12.09232574, 5.98095728, -11.39683366, -6.70063725], [ -5.65725983, 5.98095728, 3.23348475, -5.8853187 , -3.50549578], [ 10.87964992, -11.39683366, -5.8853187 , 11.21150189, 6.53822392], [ 7.08449774, -6.70063725, -3.50549578, 6.53822392, 4.66110929]])mat.dot(inv(mat))Out: array([[ 1.00000000e+00, 3.39716498e-15, 1.49782320e-15, 1.83676775e-15, 0.00000000e+00], [ 1.42818200e-14, 1.00000000e+00, 1.23314155e-15, 3.83692157e-15, 0.00000000e+00], [ 2.32658788e-15, -5.22866192e-16, 1.00000000e+00, -5.09344939e-15, 0.00000000e+00], [ -5.16927092e-15, -1.24169261e-16, 2.70233995e-15, 1.00000000e+00, -2.22044605e-15], [ 0.00000000e+00, -2.13162821e-14, 3.55271368e-15, 0.00000000e+00, 1.00000000e+00]])print mat[[ 7.02225343 6.26630278 -5.71904522 0.17946762 -6.2179201 ] [ 6.26630278 7.57852343 -5.01182539 2.14901066 -5.41337169] [ -5.71904522 -5.01182539 11.92261964 3.39074865 5.69807664] [ 0.17946762 2.14901066 3.39074865 4.12046195 -0.41319453] [ -6.2179201 -5.41337169 5.69807664 -0.41319453 6.74816678]]q,r = qr(mat)print q[[-0.55519117 0.18834857 -0.45498506 0.39651103 0.54042129] [-0.49542444 -0.57697237 0.09716331 0.3885269 -0.51113956] [ 0.45215734 -0.18772943 -0.81625432 0.15011252 -0.26740704] [-0.01418901 -0.74100777 -0.08208317 -0.44183326 0.49875031] [ 0.49159923 -0.21746917 0.33247425 0.68853137 0.35555982]]print r[[-12.64835211 -12.19141702 13.80210286 0.10724925 12.03373455] [ 0. -2.66667445 -4.17544298 -4.80609789 -0.27880506] [ 0. 0. -6.00063474 -3.11616047 -0.07049193] [ 0. 0. 0. -0.68995137 1.11552585] [ 0. 0. 0. 0. 0.07628223]]
11.读取文件的函数np.loadtxt()
建立个array_ex.txt文件(默认工作目录),里面填充如下数据:
1,2,3,4
2,3,4,5
4,5,6,7
1,2,3,4
用np.loadtxt函数读取它
arr = np.loadtxt('array_ex.txt',delimiter=',') arr array([[ 1., 2., 3., 4.], [ 2., 3., 4., 5.], [ 4., 5., 6., 7.], [ 1., 2., 3., 4.]])
12.保存文件函数np.save()与加载函数np.load(),以及多个数组压缩存储函数np.savez()
#coding:utf-8import numpy as nparr = np.arange(10)#在当前路径将arr里面的内容写入到some_array文件中若文件不存在创建文件,存在则清空当前内容np.save('some_array',arr)print np.load('some_array.npy')#[0 1 2 3 4 5 6 7 8 9]#将多个数组压缩存储在一个文件中np.savez('array_archive.npz',a = arr,b = arr)arch = np.load('array_archive.npz')arch['b']Out[129]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
13.高维函数拉平函数np.ravel()
#coding:utf-8import numpy as nparr = np.arange(15).reshape((5,3))#无论之前是几维最后都变成一维print arr.ravel()[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
14.np.unique()函数用来去重查找一个元素是否在另外一个元素中np.in1d()
import numpy as npnames = np.array(['Bob','Joe','Will','Bob','will','Joe','Joe'])print set(names)set(['Will', 'will', 'Bob', 'Joe'])print sorted(set(names))['Bob', 'Joe', 'Will', 'will']print np.unique(names)['Bob' 'Joe' 'Will' 'will']values = np.array([6,0,0,3,2,5,6])print np.in1d(values,[2,3,6])[ True False False True True False True]
15.np.repeat()函数与np.tile()函数
import numpy as nparr = np.arange(4)print arr.repeat(3)#[0 0 0 1 1 1 2 2 2 3 3 3]print arr.repeat([2,3,4,5])#[0 0 1 1 1 2 2 2 2 3 3 3 3 3]arr = arr.reshape((2,2))print arr.repeat(2,axis = 0)[[0 1] [0 1] [2 3] [2 3]]print arr.repeat(2,axis = 1)[[0 0 1 1] [2 2 3 3]]print np.tile(arr,2)[[0 1 0 1] [2 3 2 3]]print np.tile(arr,(2,3))[[0 1 0 1 0 1] [2 3 2 3 2 3] [0 1 0 1 0 1] [2 3 2 3 2 3]]
16.np.take()函数与np.put()函数
import numpy as npimport numpy.random as np_randomarr = np.arange(10) * 100inds = [7,1,2,6]print arr[inds]#[700 100 200 600]print arr.take(inds)#[700 100 200 600]arr.put(inds,50)print arr#[ 0 50 50 300 400 500 50 50 800 900]
- numpy一些常用函数小结
- numpy函数库中一些常用函数的记录
- numpy中一些常用函数的用法总结
- Numpy常用函数
- Numpy:常用函数
- numpy常用函数
- numpy常用函数
- numpy常用函数笔记
- 熟悉 NumPy 常用函数
- 掌握 NumPy 常用函数
- numpy常用函数总结
- numpy中的常用函数
- Numpy常用函数
- numpy 常用函数小计
- pandas numpy常用函数
- NumPy基础--常用函数
- 常用numpy函数
- numpy部分常用函数
- CentOS下(rsync+crontab)触发式实现服务器间的文件备份同步
- QTextStream读取文件内容
- ElasticSearch Java分组查询
- springboot集成JestClient连接elasticsearch-5.x
- CentSo7 linux安装svn
- numpy一些常用函数小结
- Coredata使用
- Unix/Linux的System V、BSD、Posix概念
- 由initializationError出发的junit配置之旅
- linux常用命令
- java设计模式之责任链模式
- Hibernate 映射关系(基于注解)
- Andorid应用去google广告
- 华为服务器远程iMana(IPMI)使用的一些问题