NumPy
数组
NumPy的基本对象是同类型的多维数组
a = np.arange(20)
通过这个可以生成一个一维数组a,从0开始,步长为1,长度为20。
我们可以通过函数reshape
重新构造这个数组,例如构造为一个4*5的二维数组,reshape
的参数代表各个维度的大小,且按各维顺序排列。
a = a.reshape(4,5)
#结果为
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
array同时还有一些函数可以查看相关属性。
- ndim 查看维度
- shape 查看各维度大小
- size 查看全部元素个位
- dtype 查看元素类型
创建数组
数组的创建可以通过转换列表实现,高维数组可通过转换嵌套列表来实现。
raw = [0,1,2,3,4]
a = np.array(raw)
#####
raw = [[0,1,2,3,4],[5,6,7,8,9]]
b = np.array(raw)
一些特殊的数组有特别定制的命令生成,如4*5的全零矩阵。
d = (4,5)
np.zeros(d)
##结果为:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
但是默认生成的类型是浮点型,可以通过指定类型改为整型
d = (4,5)
np.ones(d,dtype=int)
[0,1)区间的随机数数组
np.random.rand(5)
数组操作
数组中简单的四则运算已经重载过了,都是基于数组元素的。
+=,-=,*=,、-= 操作符在NumPy中同样支持。
-
全部元素的和:
a.sum()
-
数组的最大值和最小值:
a.max()/a.min()
-
每一行的最大值:
a.max(asis=1)
-
每一列的最小值:
a.ming(axis=0)
科学计算中大量使用到矩阵计算,NumPy同时提供了矩阵对象(matrix)
矩阵和数组的差别为:
- 矩阵是二维的,而数组的可以是任意正整数维度
- 矩阵的操作符进行的是矩阵乘法,乘号左侧的矩阵列和乘号右边的矩阵行要相等,而在数组中操作符进行的是每一个元素的对象相乘,乘号两侧的数组每一维大小需要一致。
数组可以通过asmatrix
或者mat
转换为矩阵,或者直接生成。
a = np.arange(20).reshape(4,5)
a = np.asmatrix(a)
b = np.matrix('1.0,2.0,3.0,4.0')
数组元素的访问
数组和矩阵元素的访问可以通过下标进行
a = np.array([3.2,1.5],[2.5,4])
print(a[0][1])
print(a[0,1])
可以通过下标访问来修改数组元素的值
a[0][1] = 2.0
利用:
可以访问到某一维的全部数据
a:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
例如取出矩阵中的第2和4列
print(a[:,[1,3]])
将第一列大于5的元素(10,15)对应的第三列元素(12,17)取出来
a[:,2][a[;,0] > 5]
可以使用where
函数查看特定值在数组中的位置
loc = np.where(a==11)
print(loc)
(array[2],array[1])
数组操作
矩阵转置
a = np.random.rand(2,4)
print "a:"
print a
a = np.transpose(a)
print "a is an array, by using transpose(a):"
print a
b = np.random.rand(2,4)
b = np.mat(b)
print "b:"
print b
print "b is a matrix, by using b.T:"
print b.T
a:
[[ 0.17571282 0.98510461 0.94864387 0.50078988]
[ 0.09457965 0.70251658 0.07134875 0.43780173]]
a is an array, by using transpose(a):
[[ 0.17571282 0.09457965]
[ 0.98510461 0.70251658]
[ 0.94864387 0.07134875]
[ 0.50078988 0.43780173]]
b:
[[ 0.09653644 0.46123468 0.50117363 0.69752578]
[ 0.60756723 0.44492537 0.05946373 0.4858369 ]]
b is a matrix, by using b.T:
[[ 0.09653644 0.60756723]
[ 0.46123468 0.44492537]
[ 0.50117363 0.05946373]
[ 0.69752578 0.4858369 ]]
矩阵求逆
import numpy.linalg as nlg
a = np.random.rand(2,2)
a = np.mat(a)
print "a:"
print a
ia = nlg.inv(a)
print "inverse of a:"
print ia
print "a * inv(a)"
print a * ia
a:
[[ 0.86211266 0.6885563 ]
[ 0.28798536 0.70810425]]
inverse of a:
[[ 1.71798445 -1.6705577 ]
[-0.69870271 2.09163573]]
a * inv(a)
[[ 1. 0.]
[ 0. 1.]]
按列拼接两个向量组成一个矩阵
a = np.array((1,2,3))
b = np.array((2,3,4))
print np.column_stack((a,b))
[[1 2]
[2 3]
[3 4]]
缺失值
缺失值在分析中也是信息的一种,NumPy提供nan
作为缺失值的记录,通过isnan
判定
a = np.random.rand(2,2)
a[0,1] = np.nan
print(np.isnan(a))
[[False True]
[False False]]
网友评论