np的切片索引、花式索引和布尔索引

有的是看别人的视频和文档,有的是自己悟的,如有错误,请指正。

切片索引是利用切片进行索引。(与列表中的切片基本一样)

花式索引是利用整数数组进行的索引。

布尔索引是利用与原数组相同维度的 只包含True、False值的数组索引,并只返回True的值。


import numpy as np
import numpy as np
In [110]:

a= np.random.randn(4,3)
a
a= np.random.randn(4,3)
a
Out[110]:
array([[-0.71696528,  0.76921297, -1.73852093],
       [-1.37913036, -0.97313174,  0.06219392],
       [-0.23892102, -0.00560969,  0.61863407],
       [-0.84243978, -0.60846437,  1.05872804]])
花式索引
#花式索引,其中必须两个位置参数中,是整数,可以分别是列表或者元组形式,代表的是下标
In [112]:

#花式索引可以理解为,深拷贝,对新数组的操作不影响原数组
In [113]:

b0 = a[1,2]
b0
Out[113]:
0.0621939230687335
In [114]:

#可以看到,下面a 数组并没有因为b0变化而变化
In [115]:

b0 = 0
print(a)
[[-0.71696528  0.76921297 -1.73852093]
 [-1.37913036 -0.97313174  0.06219392]
 [-0.23892102 -0.00560969  0.61863407]
 [-0.84243978 -0.60846437  1.05872804]]
In [116]:

b1 = a[(1,3),2]
b1
Out[116]:
array([0.06219392, 1.05872804])
In [117]:

#情况一样,多元素的花式索引,原数组a没变
In [118]:

b1 = 0
print(a)
[[-0.71696528  0.76921297 -1.73852093]
 [-1.37913036 -0.97313174  0.06219392]
 [-0.23892102 -0.00560969  0.61863407]
 [-0.84243978 -0.60846437  1.05872804]]
切片索引
#从原数组中,切片得来的新数组:
In [120]:

c = a[0:3,:]
c
Out[120]:
array([[-0.71696528,  0.76921297, -1.73852093],
       [-1.37913036, -0.97313174,  0.06219392],
       [-0.23892102, -0.00560969,  0.61863407]])
In [121]:

#对切片得来的数组 -赋值操作
In [122]:

c[:,:] = 0.5
c
Out[122]:
array([[0.5, 0.5, 0.5],
       [0.5, 0.5, 0.5],
       [0.5, 0.5, 0.5]])
In [123]:

#请看大屏幕,此时的,影响到了原数组a,可以理解为数组的切片操作-浅拷贝
In [124]:

print(a)
[[ 0.5         0.5         0.5       ]
 [ 0.5         0.5         0.5       ]
 [ 0.5         0.5         0.5       ]
 [-0.84243978 -0.60846437  1.05872804]]
布尔索引
#下面实验 布尔实验
In [126]:

scores = a
In [127]:

#假设 上面的数组a的每一行,是每个人的成绩,每一列,代表语数外的成绩
In [128]:

names = np.array(['zhangsan','lisi', 'wangwu','xionger'])
In [129]:

#看,对数组的 == ,意味着对每一个 元素的 ==,最后得到与 原数组相同维度的、只包含
#True和False的数组
In [130]:

names=='zhangsan'
Out[130]:
array([ True, False, False, False])
In [132]:

(names =='zhangsan')& (names == 'xionger')
Out[132]:
array([False, False, False, False])
In [133]:

#注意 下面的这个,相当于花式索引,方括号代表索引,然后里面的这个是 一个与scores 第一维度
#相同的shape的数组,(4,),然后因为第一个是True,因此相当于 索引scores【0,:】
In [134]:

scores[names=='zhangsan']
Out[134]:
array([[0.5, 0.5, 0.5]])
In [141]:

d = scores[names=='zhangsan']
print(d)
print(scores[0,:])
[[0.5 0.5 0.5]]
[0.5 0.5 0.5]
In [142]:

e = scores[names=='zhangsan',1:3]
e
Out[142]:
array([[0.5, 0.5]])
In [ ]:

#证明,只要有布尔索引,那么还是花式索引,还是深拷贝,即新数组操作,不影响原数组
In [143]:

e = 0
print(scores)
[[ 0.5         0.5         0.5       ]
 [ 0.5         0.5         0.5       ]
 [ 0.5         0.5         0.5       ]
 [-0.84243978 -0.60846437  1.05872804]]
#每个维度的索引,只能有一个布尔索引,剩下维度可以布尔、切片和花式索引的


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值