目录
1.Numpy介绍
2.数组
2.1创建数组
2.2数组的属性
2.3创建特殊的数组
2.4数组切片操作
2.4.1——一维数组的切片
2.4.3——二维数组的切片
2.4.4——三维数组的切片
2.5——reshape与resize
3.数组运算
4.个人总结
hello^-^,感谢各位的来访,祝南方的小伙伴小年快乐喔,也祝昨天的北方小伙伴小年快乐。
嘻嘻嘻
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
导入numpy模块,在numpy中数组是一个ndarray对象。
import numpy as np
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
属性 | 描述 |
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]]
函数 | 功能描述 |
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]
切片操作-数组名[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]
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即第三列切,这里生成的数组为一维数组不是二维数组
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个二维数组。
函数 | 功能描述 |
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)将二位数组转换为一维数组
这里拿加法举例子
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]]
以上就为本人对numpy模块数组操作的一部分的简单学习,感谢各位的观看,希望各位也能有所收获,并与我讨论,谢谢大家!!!!!!最后祝大家身体健康,万事如意!!!