什么是Numpy?以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大。堪比Matlab啊。果然是人生苦短,我用Python。所以本文作为一个记录&笔记,希望可以帮助大家快速入门Numpy。如果你有Matlab基础,那么你能很快看懂本文!!!(本文长期更新!!!)
Numpy是Python 专门处理高维数组 (high dimensional array) 的计算的包
- 强大的N维数组对象:ndarray
- 可以对数组结构数据进行运算(不用遍历循环)
- 有随机数、线性代数、傅里叶变换等功能
方法一:
pip install numpy
方法二:
安装anaconda 安装anaconda后,numpy是可以直接使用的,无需二次安装
下载地址:https://www.anaconda.com/
正文:
在使用 numpy 之前,需要引进它,语法如下:
import numpy
这样你就可以用 numpy 里面所有的内置方法 (build-in methods) 了,比如求和与均值。
numpy.sum() numpy.mean()
但是每次写 numpy 字数有点多,通常我们给 numpy 起个别名 np,用以下语法,这样所有出现 numpy 的地方都可以用 np 替代。
import numpy as np创建数组
import numpy as np t1 = np.array([1,2,3]) print(t1) print(type(t1)) >>>[1 2 3]
除了np.array之外还有其他函数可以创建新数组,这里列出常用的几个:
arange # python range的数组版 asarray # 将输入转换为ndarray ones # 根据给定的形状和类型生成全1的数组 ones_like # 根据给定的数组生成形状一样的全1的数组 zeros # 根据给定的形状和类型生成全0的数组 zeros_like # 根据给定的数组生成形状一样的全1的数组 eye # 生成一个N*N的特征矩阵(对角线为1,其余为0)
arange 和 range一样 会帮助我们快速的生成一堆数据 只不过这是在numpy里面 生成的是一堆数组
t2 = np.array(range(10)) print(t2) print(t2.dtype) >>>[0 1 2 3 4 5 6 7 8 9] int32 t3 = np.arange(12) print(t3) >>>[ 0 1 2 3 4 5 6 7 8 9 10 11] t4 = np.array([1,1,0,1,0,0],dtype = bool) print(t5) print(t5.dtype) >>>[ True True False True False False] boolround取小数 第二个参数值表示取几位
t8 = np.round(t7,2) print(t8) >>>array([0.2 , 0.9 , 0.2 , 0.94, 0.61, 0.38, 0.27, 0.37, 0.08, 0.8 ])
数组的形状和索引
一维数组:import numpy as np
t1 = np.arange(12)
print(t1)
>>>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
print(t1.ndim) # 查看维度系数
>>>1
t1 > 5 #判断数组里面大于5的数,返回值为bool
>>>array([False, False, False, False, False, False, True, True, True,
True, True, True])
boolindex = t1 > 5
t1[boolindex] # 将大于5的数值拿出
>>>array([ 6, 7, 8, 9, 10, 11])
二维数组:
arr = np.array([[22,54,32],[45,73,83],[86,43,82]]) bidx = arr < 30 print(bidx) arr[bidx] #布尔值索引 print(arr.ndim) #查看维度数 print(t1.shape) # shape 查看数组的形状 print(arr.shape) >>>[[ True False False] [False False False] [False False False]] 2 (12,) (3, 3)三维数组:
arr1 = np.array([[[22,54,32],[45,73,83],[86,43,82]],
[[55,21,63],[21,32,6],[6,43,2]],
[[45,76,51],[22,356,234],[86,1,98]]
])
arr1
print(arr1.ndim)
print(arr1.shape)
>>>3
(3, 3, 3)
reshape(),直接更改数组的形状,但更改前后数组元素个数必须相同
t3 = t4.reshape((3,4))
print(t3)
>>>array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
t5 = np.arange(24).reshape((2,3,4))
t5
# print(t5.shape)
>>>array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
resize()
print(np.resize(np.arange(16),(3,5))) # resize当后面的数组元素个数小于前面生成的数量时,按照顺序迭代 print(np.resize(np.arange(12),(3,5))) # resize当后面的数组元素个数大于前面的生成的数量,则随机填充 >>> [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 0 1 2]]数组的类型转化
**astype()**可以将数组中元素的类型进行转化,在numpy中元素类型有以下几种(太多了就不都写了):
int8, uint8 #有符号和无符号的8整位整数 int16, uint16 #有符号和无符号的16整位整数 int32, uint32 #有符号和无符号的32整位整数 int64, uint64 #有符号和无符号的64整位整数 float16 #半精度 float32 #单精度 float64 #双精度 bool #布尔 .....
举个类型转换的栗子:
ar1 = np.arange(10,dtype=float) ar2 = ar1.astype(np.int64) print(ar1,ar2) >>> [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [0 1 2 3 4 5 6 7 8 9]数组的堆叠
数组的堆叠有hstack(),vstack() 以及 stack(),下面分别举例:
a = np.arange(10) b = np.arange(10,20) print(ar1,ar2) # 横向链接 print(np.hstack((a,b))) # 竖向链接 a = np.array([[1],[2],[3]]) b = np.array([['a'],['b'],['c']]) print(np.vstack((a,b))) # 任意堆叠 a = np.arange(10) b = np.arange(10,20) print(np.stack((a,b),axis=1)) # 竖向堆叠 print(np.stack((a,b))) # 横向堆叠 >>>> [0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] [['1'] ['2'] ['3'] ['a'] ['b'] ['c']] [[ 0 10] [ 1 11] [ 2 12] [ 3 13] [ 4 14] [ 5 15] [ 6 16] [ 7 17] [ 8 18] [ 9 19]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]数组的拆分
数组拆分同样分为横向拆分和竖向拆分。
# 数组拆分
ar = np.arange(16).reshape(4,4)
print(ar)
print(np.hsplit(ar,2)) #纵向拆分
print(np.vsplit(ar,2)) #横向拆分
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
常用计算函数
这里的计算函数与Python中的计算函数用法相同,这里不再过多论述。
#计算函数 np.mean() #求平均值 np.max() #最大值 np.min() #最小值 np.gtd() #标准差 np.var() #方差 np.sum() # 其中参数axis=0按列求和axis=1按行求和
7️⃣0️⃣7️⃣6️⃣年8️⃣月7️⃣日0️⃣8️⃣点5️⃣分,亲亲数字连起来去Q➕一下,有笔记哦!



