numpy一些常用函数小结

最近在学numpy,学习一门新的语言总有许多的API,而这些API又杂又容易忘记,所以我把一些常用的函数记录下来以便以后随时查阅
1.np.sqrt()函数用来给一个列表中每一个元素求根号

import numpy as np
import numpy.random as np_random
arr = 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 np
import numpy.random as np_random
x = 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_random
arr = np_random.randn(7) * 5
print '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 np
import numpy.random as np_random
arr = 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 np
arr = 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-8
print '生成数组时指定数据类型'
import numpy as np
arr = np.array([1,2,3],dtype = np.float64)
print arr.dtype
#float64

arr = np.array([1,2,3],dtype = np.int32)
print arr.dtype
#int32

print '使用astype复制数组并转换数据类型'
int_arr = np.array([1,2,3,4,5])
float_arr = int_arr.astype(np.float)
print int_arr.dtype
#int64
print float_arr.dtype
#float64

print '使用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-8
import numpy as np
arr = 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 np

np.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 np
import numpy.random as np_random
name_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行和第3print 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'] = 7
print 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 np
import numpy.random as np_random
from 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-8
import numpy as np
arr = 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-8
import numpy as np
arr = 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 np
names = 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 np
arr = 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 np
import numpy.random as np_random
arr = np.arange(10) * 100
inds = [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]
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值