赞
踩
Numpy是一个python用来处理数学问题的包,全程是Numerical Python。
其最重要的一点就是,提供了n维数组,弥补了list的不足。
而且Numpy还有一个优势,就是快。它可以利用矩阵的计算优化,比用for
循环计算要快很多。
在深度学习中,常见的就是数据有
有多种方式,最常见的一种方式就是用list生成。
此外Numpy也提供了别的生产方式包括随机生成,线性生成等。
nd1 = np.array([[1,2,3],[4,5,6]])
#[[1 2 3]
# [4 5 6]]
这个非常重要,特别是正态分布的随机生成,因为在神经网络的初始过程中,常常需要使用这个。
nd2 = np.random.randn(3,4)#正态分布随机数,在神经网络初始值的时候非常重要
nd3 = np.random.random([4,8])
#[[-0.10173459 -0.54538422 -0.29352747 0.50820633]
# [-0.71678867 0.84748088 0.53617277 0.9507533 ]
# [-0.51062093 0.36694861 0.19478153 -1.12682578]]
#[[0.09053044 0.49628049 0.97283994 0.90603421 0.12833269 0.80542632 0.0449014 0.54654473]
# [0.93020989 0.82291035 0.65991494 0.8846432 0.2886918 0.14652968 0.64752396 0.00876962]
# [0.7109207 0.46917494 0.38844244 0.43906524 0.34592282 0.44015401 0.27424505 0.11715678]
# [0.62527117 0.75357782 0.23492603 0.42408179 0.77642505 0.45620374 0.60924712 0.98498708]]
例如全是0的矩阵,全1矩阵,对角阵。
nd1 = np.zeros([3 , 4]) #全是0
nd2 = np.ones([3,4])#全是1
nd3 = np.diag([1,2,3])
这个和matlab非常像,提供有部分函数。
print(np.arange(10))
print(np.arange(1,4,0.5)) #开始,结束,步长
print(np.linspace(0,1,10)) #开始,结束,点的数量
#[0 1 2 3 4 5 6 7 8 9]
#[1. 1.5 2. 2.5 3. 3.5]
#[0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556 0.66666667 0.77777778 0.88888889 1. ]
通过:
,-1
就可以完成所需要的操作。
nd = np.arange(25).reshape(5,5)
print(nd)
print(nd[0:2,:])
print(nd[:,2])
print(nd[3:,2:])
print(nd[2::2,::2])
运行结果:
[[ 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]]
[[0 1 2 3 4]
[5 6 7 8 9]]
[ 2 7 12 17 22]
[[17 18 19]
[22 23 24]]
[[10 12 14]
[20 22 24]]
有两种乘法,一种是对应元素相乘(需要两个矩阵大小相同),另一个就是矩阵乘法。
A = np.arange(4).reshape(2,2)
B = np.arange(8).reshape(2,4)
C = np.arange(4).reshape(2,2)
print(A*C)
print(np.dot(A , B))
运行结果
[[0 1]
[4 9]]
[[ 4 5 6 7]
[12 17 22 27]]
这一点非常重要,比如说在图片识别,往往需要将一个二维的图片,转换成一个一维向量。
#reshape不改变数组本身
#resize改变数组
A = np.arange(10)
print(A.reshape(2,5))
A.resize(2,4)
print(A)
A = A.transpose(1,0)
print(A)
print(A.flatten())
运行结果
[[0 1 2 3 4]
[5 6 7 8 9]]
[[0 1 2 3]
[4 5 6 7]]
[[0 4]
[1 5]
[2 6]
[3 7]]
[0 4 1 5 2 6 3 7]
通过一个例子可以更好地理解reshare
,它不会重新复制一遍整个数组,而是一个指针。
aa = numpy.arange(12)
bb = aa.reshape((3,4))
print(bb)
bb[:] = 111
print(aa)
运行结果
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[111 111 111 111 111 111 111 111 111 111 111 111]
在修改bb之后会导致aa全部被修改,这也就是指针是特性。
从数据库的角度来看,aa就是概念模式,bb就是一个外模式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。