python Numpy学习(三)

python numpy学习(三)

花式索引

切片只能支持连续或者等间隔的切片操作,要想实现任意位置的操作,需要使用花式索引fancy slicing.

一维花式索引

与range函数类似,我们可以使用arange函数来生成等差数列。

a=np.arange(0,100,10)
a
array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

花式索引需要指定索引位置:

index=[1,2,-3]
y=a[index]
print(y)
[10 20 70]

使用布尔数组进行花式索引:

mask=np.array([0,2,2,0,0,1,0,0,1,0],dtype=bool)
mask
array([False, True, True, False, False, True, False, False, True, False],dtype=bool)

mask必须是布尔数组,长度必须和数组长度相等。

a[mask]
array([10, 20, 50, 80])

二维花式索引

对于二维化石索引,我们需要给定行和列的值:

a=np.array([0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55])
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35,],
       [40, 41, 42, 43, 44, 45,],
       [50, 51, 52, 53, 54, 55,])

返回的是一个一条次对角线上的5个值:

a[(0,1,2,3,4),(1,2,3,4,5)]
array([1, 12, 23, 34, 45])

返回的是最后三行的第1,3,5,列:

a[(3:),([0,2,4])]
array([[30, 32, 34],
       [40, 42, 44],
       [50, 52, 54]])

也可以使用mask进行索引:

mask=np.array([1,0,1,0,0,1],dtype=bool)
a[mask,2]
array([ 2, 22, 52])

与切片不同,花式索引返回的是原对象的一个复制而不是引用。

“不完全”索引

只给定行索引的时候,返回整行:

y=a[3]
y
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25]])

也可以使用花式索引取出2,3,5行:

con=np.array([0,1,1,0,1,0],dtype=bool)
a[con]
array([[10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [40, 41, 42, 43, 44, 45]])

where语句

a=np.array([0,12,5,20])

判断数组中的元素是否大于10:

a>10
array([False, True, False, True],dtype=bool)

数组中所有大于10的元素的索引位置:

np.where(a>10)
(array([1,3],dtype=int64),)

注:where的返回值是一个元组。
也可以用数组操作:

a[a>10]
array([12,20])

a[np.where(a>10)]
array([12,20])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值