numpy的学习(python)

非常感谢莫烦老师的讲解 ------------->>>>>> 学习视频请自行去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
>>> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值