python学习-numpy基础

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表示按列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公移山山不移

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值