numpy中的几个小函数

最近在看机器学习,主要参考书是李航博士的统计学习,突然间接触到一个新领域(名词,算法,高维度,概率论),个人感觉难度挺大的。定个小目标,每天学习一点点,争取年前看完统计学习和吴恩达视频,尽量把算法都实现一下。
没有装anaconda的同学建议装一个,里面有各种常用安装包,也可以在pycharm中使用,不用再去下载python的相关版本了,在cmd命令窗口输入jupyter notebook命令可以直接打开。new一下就可以得到一个cell,可以输入程序同时按下shift,enter运行程序了。

numpy包

numpy包主要是实现对矩阵的高效操作(目前为止个人的浅薄理解),相对传统的for循环,np.dot(a,b)能够缩小运行时间。看例子:

import numpy as np
import time
a=np.random.rand(100000)
#生成n*1矩阵
b=np.random.rand(100000)
tic=time.time()
c=np.dot(a,b)#向量化计算
toc=time.time()
print("vectorization version"+str(1000*(toc-tic))+"ms")
#非向量化,传统for循环
c=0
tic=time.time()
for i in range(100000):
    c=a[i]*b[i]
toc=time.time()
print("for version"+str(1000*(toc-tic))+"ms")
控制台输出:
vectorization version0.9999275207519531ms
for version40.02952575683594ms

.dot(a,b)函数对于两个一维数组计算的是内积,而如果参数是两个矩阵(i,j>2)则输出的是两个矩阵的。若想计算1*n矩阵A,A.T(A的转置)和A 的乘积,要命名成np.arrary([[1,2,3]])这样,感觉在numpy中把数组没有当矩阵对待。

import numpy as np
a=np.array([1,2,3,4])#一维数组
b=np.array([5,6,1,1])
c=np.dot(a,b)
print(c)
a=np.array([[1,2],#矩阵
            [3,4]])
b=np.array([[5,6,7],
            [1,1,6]])
c=np.dot(a,b)
print(c)
控制台:
24
[[ 7  8 19]
 [19 22 45]]

求和函数.sum()

在矩阵中可以用.sum(axis=0或1)函数,当参数为axis=0是对矩阵每一列求和,当axis=1对每一行求和。

import numpy as np
A=np.array([[56.0,0.0,4.4,68.0],
           [1.2,104.0,52.0,8.0],
           [1.8,135.0,99.0,0.9]])
print(A)
cal1=A.sum(axis=0)#axis=0表示希望在竖直方向求和,axis=1表示希望在水平方向求和,
cal2=A.sum(axis=1)
print(cal1)
print(cal2)
控制台:
[[  56.     0.     4.4   68. ]
 [   1.2  104.    52.     8. ]
 [   1.8  135.    99.     0.9]]
[  59.   239.   155.4   76.9]
[ 128.4  165.2  236.7]

reshape()函数,用来对矩阵进行变形。

import numpy as np
a=np.array([[1,2,3,4],
            [5,6,7,8]])
print(a)
b=a.reshape(1,8)
c=a.reshape(4,2)
print(b)
print(c)
控制台:
[[1 2 3 4]
 [5 6 7 8]]
[[1 2 3 4 5 6 7 8]]
[[1 2]
 [3 4]
 [5 6]
 [7 8]]

.shape,用于求矩阵多少行到少列.没有参数返回矩阵的行列,shape[0]返回矩阵的行,shape[1]返回矩阵的列.函数eye(n)用于构造一个单位矩阵。

import numpy as np
a=np.array([[1,2,3,4],
            [5,6,7,8]])
b=a.shape
print(b)
c=a.shape[0]
d=a.shape[1]
print(c)
print(d)
m=eye(3)
print(m)
控制台:
(2, 4)
2
4
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

argsort()函数,对一个列表进行排序,注意:返回的数值是从小到大的下标。

a=np.array([4,2,5,3])
b=argsort(a)
print(b)
控制台:
[1 3 0 2]

python中对矩阵和常数进行加减乘除,比较灵活。小心出错哟。

a=np.array([[4,2,5,3],
           [1,8,6,9]])
b=a+100#常数100自动转化为2*4的矩阵
print(a)
print(b)
控制台输出:
[[4 2 5 3]
 [1 8 6 9]]
[[104 102 105 103]
 [101 108 106 109]]

好了,今天就写这么多了,记录一下今天学习的东西。

猜你喜欢

转载自blog.csdn.net/liujiang0529/article/details/78380146