ndarray:NumPy核心 • N-dimensional array, N维数组 • 相同数据类型的元素组成的多维数组 • 数组大小需事先指定
numpy的ndarray数组索引方式进阶理解:
v = np.array([[1,2,3].[4,5,6],[7,8,9]])
a = v[0]
[1,2,3]
b = v[1:]
[[4,5,6]
[7,8,9]]
c = v[:,0]
[1,4,7]
首先ndarray的索引与列表类似,都是0开始,使用a.[]索引方式获得的是最外层的顺序下的元素,[1:]表示从索引1开始及之后的所有元素,v[:,0]表示所有索引都被引用,然后引用每个索引下的元素下的索引为0的元素。从外到内依次深入。(即外层索引对应的元素自身也有索引)
属性:>>> names.ndim #数组维度 1
>>> names.size #数组元素个数 5
>>> names.dtype #数组数据类型
抽取数组的一部分元素生成新数组称为切片操作:直接以列表形式给出需要的元素索引
索引也可表示为:start:end:step#生成 start ~ end-1,步长step的等差数列
>>> subjects[ [0,2,4] ] #两层括号,[0,2,4]为索引列表
array(['Math', 'Python', 'Art'], dtype='<U8')
>>> names[ 1:4 ] #抽取索引为1、2、3的元素
subjects[ : -1:2] #抽取索引为0、2、4的元素
根据条件筛选数组元素;
使用条件表达式和关系运算符 • 筛选出names数组中值等于“王微”或“钱易铭”的元素
>>> names[ (names == '王微') | (names== '钱易铭')]
条件表达式:生成布尔型的数组
>>> mask = (names == '王微') | (names== '钱易铭')
>>> mask array([ True, False, False, False,True ], dtype=bool)
>>> names[ mask ] array(['王微' '钱易铭'], dtype='
二维数组对象
创建二维数组scores,记录 “names”中同学 “subjects”的各门课程考试成绩
>>> scores= np.array([[70,85,77,90,82,84,89], [60,64,80,75,80,92,90], [90,93,88,87,86,90,91], [80,82,91,88,83,86,80],[88,72,78,90,91,73,80]])
>>> scores
array([[70, 85, 77, 90, 82, 84, 89],
[60, 64, 80, 75, 80, 92, 90],
[90, 93, 88, 87, 86, 90, 91],
[80, 82, 91, 88, 83, 86, 80],
[88, 72, 78, 90, 91, 73, 80]])
使用array函数创建二维ndarray数组对象 • 初始化的列表,其元素也是列表
>>> scores.ndim #数组维数 2
>>> scores.size #数组元素总数,行×列 35
>>> scores.shape #数组的行数和列数 (5, 7)
>>> scores.dtype #数组元素的类型 dtype('int32')
二维数组切片操作的基本格式:arr[ row , column ]
• row行序号,column列序号,中间用‘,’隔开#行列均从0开始
• 行、列切片的表示方式与一维数组相同
• 用“:”代替行或列,表示选中对应的所有行或列
创建多维数组的常用方法
• arange()
>>>np.arange(0,11)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>>np.arange(3,11,2)
array([3, 5, 7, 9])
>>>np.arange(0.3,1.5,0.3)
array([ 0.3, 0.6, 0.9, 1.2])
• reshape() • 将一维数组转换为指定的多维数组
>>> np.arange(0,15).reshape(3,5)
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
• zeros()、 ones()
>>> np.zeros((3,4))
array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
>>> np.ones((4,3))
array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]
多维数组运算
二维数组与标量运算
>>> scores + 5#• 为所有同学的所有课程成绩增加5分。
array([[75, 90, 82, 95, 87, 89, 94], [65, 69, 85, 80, 85, 97, 95], [95, 98, 93, 92, 91, 95, 96], [85, 87, 96, 93, 88, 91, 85], [93, 77, 83, 95, 96, 78, 85]])
>>> a = np.ones((5,7))*5
等价于
>>> a array([[ 5., 5., 5., 5., 5., 5., 5.], [ 5., 5., 5., 5., 5., 5., 5.], [ 5., 5., 5., 5., 5., 5., 5.], [ 5., 5., 5., 5., 5., 5., 5.], [ 5., 5., 5., 5., 5., 5., 5.]])
>>> scores + a
array([[ 75., 90., 82., 95., 87., 89., 94.], [ 65., 69., 85., 80., 85., 97., 95.], [ 95., 98., 93., 92., 91., 95., 96.], [ 85., 87., 96., 93., 88., 91., 85.], [ 93., 77., 83., 95., 96., 78., 85.]]
二维数组与一维数组运算
每个科目基础分不同,为各科目增加相应的基 础分。
>>> bonus = np.array([3,4,5,3,6,7,2])
>>> scores + bonus
array([[73, 89, 82, 93, 88, 91, 91], [63, 68, 85, 78, 86, 99, 92], [93, 97, 93, 90, 92, 97, 93], [83, 86, 96, 91, 89, 93, 82], [91, 76, 83, 93, 97, 80, 82]])
修改选定数据
>>> scores[names == '肖良英', subjects == 'English']
array([64])
>>> scores[names == '肖良英', subjects == 'English'] + 5
array([69])
多维数组运算-通用函数#以下是函数,不是方法,需要np.函数名.(输入变量)这样来使用
一元,1个输入数组,返回1个数组
通用函数-二元 • 2个输入数组,返回1个数组
聚合函数
随机数组生成函数
• np.random模块
模块生成由10个随机整数组成的一维数组, 整数的取值范围从0到5
• randint(start, end, size)
>>> np.random.randint(0,6,10)
array([5, 5, 0, 2, 4, 3, 1, 2, 5, 4])
生成服从均值为0、方差为1的服从正态分布 的4×5二维数组
>>> np.random.normal( 0,1, size = (4,5) )
array([[ 0.50293855, -0.65924346, 1.10370417, 0.97295644, -0.94182097], [-0.10743896, -0.62138498, -0.70710979, -0.31265519, -0.10357636], [ 1.32282187, 0.91143092, -1.1728774 , 0.51703585, -1.38091545], [-2.02050138, -0.936194 , 1.47082363, 1.73261098, -0.42447148]]
axis = 0表示按列