python(numpy⽤法)
本篇⽂章主要包括两部分:
  numpy简介
  array结构介绍
⼀.numpy简介
  numpy是pyhon中⼀个⾮常常⽤的科学计算库,它主要⽤来处理对数组的运算,numpy的绝⼤部分API都是针对数组的操作,特别是多维数组。
  numpy的底层是⼀个ndarray结构,我们可以通过numpy.array(list)将⼀个列表转化为⼀个ndarry类型的数据结构。我们可以把ndarry结构看成是⼀个加强版的列表,它的本质仍然是⼀个列表,只是额外封装了⼀些⽅法和属性,使得它⽐list更加强⼤(也就是说,list 能做的事,ndarray都能做,ndarray能做的事,list就不⼀定能做。正是有了ndarry结构,使得numpy能像matlab⼀样⽅便的操作数组)。与list相⽐,ndarray有如下特性:
  ndarray类型的数组可以直接加减乘除某⼀个常数
1import numpy as np
2list=[1,2,3,4]
3array=np.array(list)
4array+1  #对数组中的每⼀个元素+1
5array*1  #对数组中每⼀个元素*1
6array/2
7array-1
  上⾯的操作若是对list进⾏,则会报错.
⼆.ndarray结构
1.numpy.array(list)将list转为array结构
1import numpy as np
2list=[1,2,3,4,5,6,7]
3array=np.array(list)
2.为了⽅便数组的计算,ndarray中的数据类型应该是⼀致的,这与list有区别,如果在创建ndarray时,数据类型不⼀致,会⾃动向下转化为相同的数据类型
1list=[1,2,3,4,5,6]
2array=np.array(list) #list的数据类型都是int型,因此array的数据类型是int
3
4list=[1,2.9,4.5,4.7]
5array=np.array(list) #list的数据包含int和浮点型,array会⾃动把数据全部转为浮点型
6
7list=[1,2,‘uh‘,4]
8array=np.array(list)  #list的数据中包含int和字符串,array会全部把数据转为字符串
3.ndarray基本属性操作
1array=np.array([[1,2,3],
2                [3,4,5]])
3
4type(array)  #返回array的数据类型(numpy.ndarray)
5
6array.dtype  #返回array数组中的数据的数据类型
7
8array.itemsize #数组中每⼀个数据所占的字节
9
10array.shape  #数组的结构,返回⼀个元组,元组中的每⼀个数据代表着数组在每⼀维有多少个数据11
12array.size  #数组中元素的总个数
13
14array.ndim  #返回数组的维度,即数组总共有多少维
15
16array.fill(0) #⽤0来填充array,即将array的所有数据都变成0
4.ndarray的切⽚
  ndarray的切⽚操作和list的切⽚操作类似:
1>>>>>>>####索引与切⽚操作
2
3#1.⼀维矩阵的索引和切⽚操作与list完全⼀致
4list=[1,2,3,4,5,6,8]
5array=np.array(list)
6array[0]  #返回索引为0的值(1)
7
8array[1:5]  #返回索引从1到5的值(不包括5)
9
10array[-1]  #返回最后⼀个元素
11
12
13#2.多维矩阵的索引和切⽚操作与list类似
14list=[[1,2,3],
15      [4,5,6],
16      [7,8,9]]
17array=np.array(list)
18array[0]    #返回索引为0的值,即第⼀⾏的元素(想想list[0]会返回什么值,这⾥是⼀致的)
19array[1,1]  #返回第⼆⾏第⼆列的元素(索引从0开始)
20array[:,1] #返回第⼆列元素
21array[:2]  #返回前两⾏元素(注意区分有逗号和没有逗号的区别)
22
23array[1,1]=10  #可以根据索引直接修改该位置的数据(与list⼀致)
24
25array[0,0:2]  #可以结合索引和切⽚来查矩阵中某些特定位置的数据,需要记住,矩阵的不同的维度是根据逗号分隔的
26
27
28
29#3.矩阵的复制有深浅拷贝之分
30array1=array  #浅拷贝,array1只是拷贝了array的⼀个引⽤,两个变量指向同⼀块内存(指向同⼀个矩阵),操作⼀个变量,另外⼀个变量值也会改变31array1[1,1]=10  #将array1的第⼆⾏第⼆列元素改为10,因为array1和array实际上指向同⼀个矩阵,因此array的第⼆⾏第⼆列元素也会变成10
32
py()  #深拷贝,array1和array是两个完全独⽴的矩阵,操作⼀个矩阵不会影响另外⼀个矩阵
34array1[1,1]=100    #将array1的第⼆⾏第⼆列改为100,因为array1和array两个矩阵是相互独⽴的,因此array第⼆⾏第⼆列元素还是10,不会变成100 35
36
37#4.arange函数和random.rand函数,根据布尔值来筛选数据
38
39####arange函数的⽤法和range函数相同,两者区别在于,arange⽣成的是⼀个ndarray矩阵,range⽣成的是⼀个list
40array=np.arange(0,100,10)#返回 array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
41
42##⽣成⼀个布尔类型的矩阵
43
44mask=np.array([0,1,0,1,1,0,0,1,0,1],dtype=bool)
45
46##根据mask来筛选矩阵中的数据,返回array中以mask中值为1的索引作为索引的对应的值
47####注意:mask的元素个数必须与array中元素个数相同,即mask.size==array.size
48array[mask]  #返回array([10, 30, 40, 70, 90])
49
50##除了⾃⼰定义⼀个bool矩阵之外,还可以利⽤array的数据⼤⼩来⽣成bool矩阵
51mask=array>50 #mask是⼀个和array有着相同size的矩阵,若array[i]的值⼤于50,则mask[i]为true,否则为false
52array[mask]  #使⽤这种⽅法可以很⽅便的在array矩阵中筛选出符合我们想要的数据
53np.where(array>50)  #使⽤where⽅法可以查看符合条件的元素的位置
54
55python 定义数组
56##random.rand()函数
57
58#arry=np.random.rand(10)  #⽣成⼀个size=10的⼀维矩阵,矩阵的每⼀个元素的值在0-1之间
View Code
5.ndarry中元素的数据类型转换
1#在创建矩阵时,可以通过指定dtype属性来指定矩阵数据的数据类型
2
3array=np.array([1,2,3,4,5],dtype=np.float32)  #指定⽣成的数据是32位的浮点类型
4array.nbytes    #计算矩阵的总共字节数(5*4=20)
5
6
7##前⾯说过,ndarray类型的矩阵会将数据类型统⼀向下转为同⼀种类型,如果想让矩阵像list那样,矩阵的元素有不同的数据类型,可以使⽤object类型8
9array=np.array([1,2,‘stre‘,4],dtype=np.object)  #⽣成的矩阵既有int类型的数据,⼜有字符串类型的数据
10
11
12#除了可以在创建矩阵时指定dtype属性外,还可以使⽤asarray(),astype⽅法来实现矩阵数据类型的转换
13
14array=np.array([1,2,3,4,5])
15array1=np.asarray(array,dtype=np.float32)  #需要注意,这种转换不会改变array的数据类型,因此需要将转换后的矩阵赋给⼀个新的变量
16array1=array.astype(dtype=np.float32)        #该⽅法也不会改变array的数据类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论