目录
hello^-^,感谢各位的来访,祝南方的小伙伴小年快乐喔,也祝昨天的北方小伙伴小年快乐。
嘻嘻嘻
1.Numpy介绍
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
2.数组
导入numpy模块,在numpy中数组是一个ndarray对象。
import numpy as np
2.1创建数组
numpy用array函数创建数组array([列表] / (元组)),n维数组由(n-1)维数组构成。
一维数组:
a=np.array([1,2,3,4])
print(a)
[1 2 3 4]
二维数组:
b=np.array([[0,1,2,3],
[1,2,3,4],
[2,3,4,5]])
print(b)
print("****************************")
print(b[0])
print(b[0][0])
[[0 1 2 3]
[1 2 3 4]
[2 3 4 5]]****************************
[0 1 2 3]
0
三维数组: 由2个二维数组构成,1个二维数组又由3个一维数组构成,一维数组又由4个元素构成。
c=np.array([[[0,1,2,3],
[1,2,3,4],
[2,3,4,5]],
[[9,8,7,6],
[8,7,6,5],
[7,6,5,4]]])
print(c)
print("****************************")
print(c[0])
print(c[0][0])
print(c[0][0][0])
[[[0 1 2 3]
[1 2 3 4]
[2 3 4 5]][[9 8 7 6]
[8 7 6 5]
[7 6 5 4]]]****************************
[[0 1 2 3]
[1 2 3 4]
[2 3 4 5]]
[0 1 2 3]
0
2.2数组的属性
属性 |
描述 |
ndim |
数组的维数 |
shape |
数组的形状(几行几列) |
size |
数组元素的总个数 |
dtype |
数组中元素的数据类型 |
itemsize |
数组中每个元素的字节数 |
示例 :
b=np.array([[0,1,2,3],
[1,2,3,4],
[2,3,4,5]])
print(b.ndim)
print(b.shape)
print(b.size)
print(b.dtype)
2
(3, 4)
12
int32
asarray()函数也是将列表或元组转化为数组对象 ,但与array不同的是在数据源本身是ndarray对象时:array()仍然会复制出一个副本,asarray()则直接引用了本来的数组(ndarray对象改变,跟着改变)
示例:
arr1=np.array([[1,1,1],[1,1,1],[1,1,1]])
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr1[0][0]=2
print("arr1数组为>\n",arr1)
print("arr2数组为>\n",arr2)
print("arr3数组为>\n",arr3)
arr1数组为>
[[2 1 1]
[1 1 1]
[1 1 1]]
arr2数组为>
[[1 1 1]
[1 1 1]
[1 1 1]]
arr3数组为>
[[2 1 1]
[1 1 1]
[1 1 1]]
2.3创建特殊的数组
函数 |
功能描述 |
np.arange(起始数字,结束数字,步长,dtype=数据类型)#前闭后开 |
创建数字序列数组 |
np.ones(shape,dtype=数据类型) |
创建全1数组 |
np.zeros(shape,dtype=数据类型) |
创建全0数组 |
np.eye(N,M,k=0, dtype=数据类型) #k为对角元素的索引,N为行,M为列,若省略M则创建方阵 |
创建返回对角线为1的矩阵 |
np.linspace(起始数字,结束数字,结束个数,dtype=数据类型)#闭区间 |
创建等差矩阵 |
np.logspace(start,stop,结束个数num=,base=,dtype=数据类型) #base的start次方到base的stop次方总共有num个元素。 |
创建等比矩阵 |
示例 :
a=np.arange(1,10,2)
b=np.ones((3,2),dtype=int)
c=np.zeros((3,2),dtype=int)
d=np.eye(4,dtype=int,k=1)
e=np.linspace(2,8,7,dtype=int)
f=np.logspace(2,10,9,base=2,dtype=int)
print("a数组为>\n",a)
print("b数组为>\n",b)
print("c数组为>\n",c)
print("d数组为>\n",d)
print("e数组为>\n",e)
print("f数组为>\n",f)
a数组为>
[1 3 5 7 9]
b数组为>
[[1 1]
[1 1]
[1 1]]
c数组为>
[[0 0]
[0 0]
[0 0]]
d数组为>
[[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[0 0 0 0]]
e数组为>
[2 3 4 5 6 7 8]
f数组为>
[ 4 8 16 32 64 128 256 512 1024]
2.4数组切片操作
2.4.1——一维数组的切片
切片操作-数组名[start:stop:step]——start为切片起始下标,stop为切片停止下标(不包含该下标数组值),即左闭又开,step为切片步长。
import numpy as np
import random
a=np.arange(10) #0-9的闭区间
print(a)
print(a[0:9:2])
[0 1 2 3 4 5 6 7 8 9]
[0 2 4 6 8]
2.4.3——二维数组的切片
import numpy as np
a=np.array([[1,2,3,4],[5,6,7,8],[5,1,2,4]])
print(a[0:2,0:2])
print(a[:,2])
print(a[2,0:2])
[[1 2]
[5 6]]
[3 7 2]
[5 1]
二维数组的切片为先对行切片再对列切片,中间逗号隔开 ,若为数字则为数字索引的行/列。
注意:
a[ : ,2]操作为先对每行切片,再对索引为2即第三列切,这里生成的数组为一维数组不是二维数组
2.4.4——三维数组的切片
t=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[4,4,4]]])
print(t[:,:,0])
[[1 4]
[7 4]]
三维数组切片同理二维数组
注意:
t[ : , : ,0]操作为先切出三维数组的每个数组即2个二维数组,再切除每一行,最后切第一列,得到1个二维数组。
2.5——reshape与resize
函数 | 功能描述 |
np.reshape(shape) | 不改变当前数组,按照shape创建新的数组 |
np.resize(shape) | 改变当前数组,按照shape创建新的数组 |
当改变形状时,应该考虑到数组中元素的个数,确保改变前后,元素总个数相等。
import numpy as np
import random
t=np.arange(12)
print(t)
print("reshape操作\n")
t.reshape(3,4)
print(t)
print("resize操作\n")
t.resize(3, 4)
print(t)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
reshape操作[ 0 1 2 3 4 5 6 7 8 9 10 11]
resize操作[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
可利用reshape(-1)将二位数组转换为一维数组
3.数组运算
这里拿加法举例子
a=np.array([0,1,2,3])
b=np.array([1,1,1,1])
print(a+b)
[1 2 3 4]
可见对应下标数值相加
一维数组也可和多维数组相加,相加时一维数组扩展至多维
a=np.array([0,1,2,3])
c=np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3]])
print(a+c)
[[1 2 3 4]
[2 3 4 5]
[3 4 5 6]]
- 数组的减法、乘法、除法运算,和加法运算规则相同。
- 当两个数组元素的数据类型不同时,精度低的数据类型会向精度高的转换再进行运算。
**幂运算 :对数组每个元素求n次方
a=np.arange(12).reshape(3,4)
print(a,"\n")
print(a**2)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]][[ 0 1 4 9]
[ 16 25 36 49]
[ 64 81 100 121]]
4.个人总结
以上就为本人对numpy模块数组操作的一部分的简单学习,感谢各位的观看,希望各位也能有所收获,并与我讨论,谢谢大家!!!!!!最后祝大家身体健康,万事如意!!!