1.为数组加上或者乘以一个标量
>>> import numpy as np
>>> a=np.array([1,2,3,4,5])
>>> a
array([1, 2, 3, 4, 5])
>>> a*1
array([1, 2, 3, 4, 5])
>>> a
array([1, 2, 3, 4, 5])
>>> a*2
array([ 2, 4, 6, 8, 10])
>>> a
array([1, 2, 3, 4, 5])
2.两个数组进行计算
1)元素数量相同
>>> a
array([1, 2, 3, 4, 5])
>>> b=np.array([2,3,4,5,6])
>>> b
array([2, 3, 4, 5, 6])
>>> a*b
array([ 2, 6, 12, 20, 30])
>>> a
array([1, 2, 3, 4, 5])
>>> b
array([2, 3, 4, 5, 6])
2)元素数量不同:会报错
>>> b
array([2, 3, 4, 5, 6])
>>> c=np.array([3,4,5,6,7,8,9])
>>> c
array([3, 4, 5, 6, 7, 8, 9])
>>> b*c
Traceback (most recent call last):
File "", line 1, in
ValueError: operands could not be broadcast together with shapes (5,) (7,)
3.可以对一个数组先进行函数运算,该函数运算返回值也是一个数组
>>> a
array([1, 2, 3, 4, 5])
>>> b=np.sin(a)
>>> b
array([ 0.84147098, 0.90929743, 0.14112001, -0.7568025 , -0.95892427])
4.多维数组的运算也是元素级别的
>>> a=np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b=np.zeros((3,3))
>>> b
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
>>> a*b
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
5.矩阵积
1)c=np.dot(a,b)求a和b的矩阵积--第一种写法
>>> a=np.arange(9).reshape(3,3)
>>> b=np.random.random(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b
array([[ 0.1752667 , 0.61713814, 0.63455636],
[ 0.42635687, 0.9609163 , 0.40790306],
[ 0.01270341, 0.29411413, 0.52187812]])
>>> c=np.dot(a,b)
>>> c
array([[ 0.4517637 , 1.54914457, 1.45165931],
[ 2.29474465, 7.1656503 , 6.14467194],
[ 4.1377256 , 12.78215603, 10.83768457]])
2)c=a.dot(b)
>>> c=a.dot(b)
>>> c
array([[ 0.4517637 , 1.54914457, 1.45165931],
[ 2.29474465, 7.1656503 , 6.14467194],
[ 4.1377256 , 12.78215603, 10.83768457]])
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b
array([[ 0.1752667 , 0.61713814, 0.63455636],
[ 0.42635687, 0.9609163 , 0.40790306],
[ 0.01270341, 0.29411413, 0.52187812]])
6.数组的自运算:不会新生数组,改变原数组
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> a+=1
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
7.通用函数:ufunx
对数组中的每个元素逐一进行操作,生成一个新数组,如平方根函数sqrt() 对数函数 log() 正弦函数sin()
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b=np.sin(a)
>>> b
array([[ 0.84147098, 0.90929743, 0.14112001],
[-0.7568025 , -0.95892427, -0.2794155 ],
[ 0.6569866 , 0.98935825, 0.41211849]])
>>> c=np.sqrt(a)
>>> c
array([[ 1. , 1.41421356, 1.73205081],
[ 2. , 2.23606798, 2.44948974],
[ 2.64575131, 2.82842712, 3. ]])
>>> d=np.log(a)
>>> d
array([[ 0. , 0.69314718, 1.09861229],
[ 1.38629436, 1.60943791, 1.79175947],
[ 1.94591015, 2.07944154, 2.19722458]])
8.聚合函数
对一数组进行聚合函数的套用,返回一个单一值作为结果
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a.sum()
45
>>> a.max()
9
>>> a.min()
1
>>> a.mean()
5.0
>>> a.std()
2.5819888974716112
20180125
1.一维度数组索引
>>> a=np.array([1,2,3,4,5])
>>> a[2]
3
>>> a[1:4]
array([2, 3, 4])
>>> a[-1]
5
2.方括号中传入多个索引值,可以同时选择多个元素
>>> a[[2,1,3]]
array([3, 2, 4])
3.多维数组索引
>>> a=np.arange(0,9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> a[1,2]
5
4.切片操作:是抽取数组的一部分元素生成新数组
1)一维数组切片
>>> a=np.arange(10,16)
>>> a
array([10, 11, 12, 13, 14, 15])
>>> a[1:5]
array([11, 12, 13, 14])
>>> a[1:5:2]
array([11, 13])
>>> a[::2]
array([10, 12, 14])
>>> a[:5:2]
array([10, 12, 14])
>>> a[:5:]
array([10, 11, 12, 13, 14])
2)二维数组切片:需要指定行和列
>>> a=np.arange(10,19).reshape(3,3)
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> a[0,:] #逗号前面是行,逗号后面是列
array([10, 11, 12])
>>> a[:,0]
array([10, 13, 16])
>>> a[1,0:1]
array([13])
3)抽取一个小一点的矩阵
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> a[0:2,0:2]
array([[10, 11],
[13, 14]])
4)如果要抽取的行或者列索引不连续,可以把这几个索引放到数组中
[13, 14]])
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> a[[1,2],0:2]
array([[13, 14],
[16, 17]])
5.二维数组迭代
1)输出每一行
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> for row in a:
... print(row)
...
[10 11 12]
[13 14 15]
[16 17 18]
2)输出每一个元素
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> for item in a.flat:
... print(item)
...
10
11
12
13
14
15
16
17
18
6.对二维数组的行或者列进行聚合函数或者自定义函数的处理
利用np.apply_along_axis(function,axis=x,arr=y)
其中function是聚合函数或者自定义函数名
axis是轴的标识,=0代表列,=1代表行
arr是矩阵的表示
如np.apply_along_axis(np.mean,axis=0,arr=a)代表,对a矩阵的每一列都套用np.mean函数
1)对a数组的每一列求均值
2)对a数组的每一行求最大值
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> b=np.apply_along_axis(np.mean,axis=0,arr=a)
>>> b
array([ 13., 14., 15.])
>>> c=np.apply_along_axis(np.max,axis=1,arr=a)
>>> c
array([12, 15, 18])
3)自定义一个函数,可以对参数进行2分之1的处理
4)利用自定义函数处理a矩阵的每一列的每一个元素
5)利用自定义函数处理a矩阵的每一行的每一个元素
>>> a
array([[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> def foo(x):
... return x/2
...
>>> b=np.apply_along_axis(foo,axis=0,arr=a)
>>> b
array([[ 5. , 5.5, 6. ],
[ 6.5, 7. , 7.5],
[ 8. , 8.5, 9. ]])
>>> c=np.apply_along_axis(foo,axis=1,arr=a)
>>> c
array([[ 5. , 5.5, 6. ],
[ 6.5, 7. , 7.5],
[ 8. , 8.5, 9. ]])
网友评论