非常感谢莫烦老师的讲解 ------------->>>>>> 学习视频请自行去B站学习
一、numpy是干嘛的
他是用来方便科学计算的,反正就是用他算的快很多倍
1.1 numpy属性
这是程序员惯用的写法,as np!
import numpy as np
1.2 numpy创建array(数组)
(1)array创建得到的结果是没有逗号的
>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> print(a)
[1 2 3 4]
(2)还可以查看array的类型
>>> a = np.array([1,2,3,4])
>>> a = np.array([1,2,3,4],dtype = np.int)
>>> print(a.dtype)
int32
你可以指定类型:位数越小表示占用空间越小,但是精度低
>>> a = np.array([1,2,3,4],dtype = np.int32)
>>> print(a.dtype)
int32
>>> a = np.array([1,2,3,4],dtype = np.int64)
>>> print(a.dtype)
int64
(3)定义多维的矩阵
一个中括号代表一维
import numpy as np
a = np.array([[1,2,3,4],[1,5,6]])
print(a)
但是我的结果是这样的
====================== RESTART: D:/untitled/numpy_1.py ======================
[list([1, 2, 3, 4]) list([1, 5, 6])]
>>>
请教后,前辈说 ,是因为调用print的时候,会自动调用python的魔法方法__str__才会变成这样。
(4)指定几乘几的矩阵
zeros是全0矩阵,ones是全1矩阵
import numpy as np
a = np.array([[1,2,3,4],[1,5,6]])
b = np.zeros((3,4))
c = np.ones((3,4),dtype = np.int16)
print(b)
print(c)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
>>>
(5)np.arange:指定范围、步长的矩阵
import numpy as np
e = np.arange(1,6,2)
print(e)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[1 3 5]
>>>
(6)按照指定范围,重新定义数组的shape
import numpy as np
f = np.arange(12).reshape((3,4))
print(f)
结果 :
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
>>>
(7)想要生成一段直线,就是可以根据指定范围和你想分几段
import numpy as np
h = np.linspace(1,10,3)
print(h)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[ 1. 5.5 10. ]
>>>
(8)在(7)的基础上,也可以重新定义shape
import numpy as np
h = np.linspace(1,10,6).reshape((2,3))
print(h)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
>>>
1.3 numpy基础运算
(1)加法,减法
import numpy as np
a = np.array([10,20,60,50])
b = np.arange(4)
c = a-b #减法
d = a+b #加法
print(a,b,c,d)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[10 20 60 50] [0 1 2 3] [10 19 58 47] [10 21 62 53]
>>>
(2)三角函数
import numpy as np
a = np.array([10,20,60,50])
b = np.arange(4)
e = np.sin(a)
print(e)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[-0.54402111 0.91294525 -0.30481062 -0.26237485]
>>>
(3)array有什么值,大于多少有几个,小于多少有几个(这个判断都一样的,改大小等于符号即可),返回的值是bool类型
import numpy as np
a = np.array([10,20,60,50])
b = np.arange(4)
print(b)
print(b < 2)
print(b == 3)
结果
====================== RESTART: D:/untitled/numpy_1.py ======================
[0 1 2 3]
[ True True False False]
[False False False True]
>>>
(4)numpy乘法分两种:
一种是两个矩阵的数字分别相乘,另外一种就是矩阵乘法
import numpy as np
a = np.array([[2,2],
[1,2]])
b = np.arange(4).reshape(2,2)
f = a * b #普通乘法
h = np.dot(a,b) #矩阵乘法
print(a)
print(b)
print(f)
print(h)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[2 2]
[1 2]]
[[0 1]
[2 3]]
[[0 2]
[2 6]]
[[4 8]
[4 7]]
>>>
其中:
h = np.dot(a,b)
还可以写成:(二者相同)
j = a.dot(b)
(5)求和,求最大值,最小值
np.sum()
np.min()
np.max()
代码:
import numpy as np
a = np.random.random((2,4)) #生成一个2乘以4,范围0到1的矩阵
b = np.sum(a)
f = np.max(a)
h = np.min(a)
print(a)
print(b)
print(f)
print(h)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[0.44645183 0.91752643 0.64115946 0.45159109]
[0.26329714 0.04260302 0.54358102 0.95787407]]
4.264084059008507
0.9578740678928407
0.042603016410041605
>>>
按照行列:
import numpy as np
a = np.random.random((2,4))
b = np.sum(a,axis = 0)#列上求值
f = np.max(a,axis = 1)#行上求值
h = np.min(a)
print(a)
print(b)
print(f)
print(h)
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[0.93756845 0.05245696 0.65505177 0.95276971]
[0.9756512 0.56996224 0.19874227 0.84663938]]
[1.91321966 0.6224192 0.85379403 1.79940909]
[0.95276971 0.9756512 ]
0.05245695961435226
>>>
(6)求索引
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.argmin(a))
print(np.argmax(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
>>>
(7)计算平均值
两种写法
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.mean(a))
print(a.mean())#必须是上面已经定义好了a,才能这样写
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
7.5
7.5
>>>
还有一个函数:average()也可以计算平均值,写法只能是np.average(a).
(8)中位数:median()
代码:
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.median(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
7.5
>>>
(9)累加,就是第几个就把包含它的,以及前面的数,都加起来。
代码:
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.cumsum(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
7.5
[ 2 5 9 14 20 27 35 44 54 65 77 90]
>>>
(10)累差:就是结果的第1个数,就是原来数组里面,第2个减去第1个;
结果的第2个数,就是原来数组里面,第3个减去第2个,以此类推
代码:
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.diff(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[[1 1 1]
[1 1 1]
[1 1 1]]
>>>
(11)找出非0的数
函数:
import numpy as np
a = np.arange(2,14).reshape((3,4))
print(a)
print(np.nonzero(a))
结果(输出是两个数组,第一个数组表示行,第二个数组表示列):
====================== RESTART: D:/untitled/numpy_1.py ======================
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
>>>
如果我们的原始数组有0就是这样的结果(上面是原始数组),可以看到0行0列是0,但是结果中没有这个坐标:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
(array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], dtype=int64), array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))
>>>
(12)排序
函数:
import numpy as np
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.sort(a))
结果:(进行每一行的单独排序)
====================== RESTART: D:/untitled/numpy_1.py ======================
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
>>>
(13)矩阵的反向:转置
函数(两种写法)
import numpy as np
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(a.T)
print(np.transpose(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
>>>
你也可以将前面学过的叠加:
举例;
import numpy as np
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print((a.T).dot(a))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[332 302 272 242]
[302 275 248 221]
[272 248 224 200]
[242 221 200 179]]
>>>
(14)clip()…额,这个函数很难描述
举个例子,比如clip(z,b,a),z表示一个矩阵,b表示一个较小值,a表示一个较大值
输出的结果就是在z这个矩阵中,凡是比b小的都会变成b,比a大的都会变成a,只有a和b之间的数不会改变。
函数:
import numpy as np
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.clip(a,5,9))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[9 9 9 9]
[9 9 8 7]
[6 5 5 5]]
>>>
(15)所有的运算符,都可以进行指定对行还是对列的运算
函数:
import numpy as np
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.mean(a,axis=0))
结果:
====================== RESTART: D:/untitled/numpy_1.py ======================
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[10. 9. 8. 7.]#以点为分隔
>>>
1.4 索引
(1)可以像列表索引一样
一维的就是索引下标,二维的是索引行数
代码(二维):
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
print(a[2])
结果(二维):
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
二维具体索引到数的时候:
代码:
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
print(a[2][0])#也可以写成print(a[2,0])
结果:
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
11
还有一种情况加冒号:
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
print(a[2,:])#第2行所有数
print(a[1,1:2]) #第1行,从第1列到第2列(不包括第2列)的数
结果:
>>>
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
[8]
(2)每一行每一列的数
打印每一行代码:
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
for row in a:
print(row)
结果:
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
>>>
打印每一列代码:
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
for column in a.T:
print(column)
结果:
>>>
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
>>>
(3)打印每一项
代码:
import numpy as np
a = np.arange(3,15).reshape(3,4)
print(a)
print(a.flatten())
for item in a.flat:
print(item)
结果:
====================== RESTART: D:\untitled\numpy_2.py ======================
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[ 3 4 5 6 7 8 9 10 11 12 13 14]
3
4
5
6
7
8
9
10
11
12
13
14
>>>