python数据分析:numpy数组的索引与切片

数组的切片

Numpy的数组与python内置的列表这个数据结构用法有点类似。

In [1]: import numpy as np

In [2]: array=np.arange(9)

In [3]: array
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [4]: array[5:8]
Out[4]: array([5, 6, 7])

我们可以将单个标量赋值给一个切片,该值会自动传播到整个切片的选区。

In [5]: array[5:8]=12

In [6]: array
Out[6]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8])

如果想取得一块副本而不是直接在矩阵上修改,可以使用copy()的办法显式的复制一下。
在高维度数组中,之前索引位置上的元素不在是一个标量,而是一个一维数组。

In [8]: array2=np.array([[1,2,3],[4,5,6],[7,8,9]])

In [9]: array2[2]
Out[9]: array([7, 8, 9])

数组中的元素索引

切片索引
之前如何切片已经讨论过,所以切片索引方法与之前相类似

In [10]: arr=np.arange(20)

In [11]: arr[1:6]
Out[11]: array([1, 2, 3, 4, 5])

到高维数组中,切片索引则有了更多的考究。

In [14]:  arr2=np.array([[1,2,3],[2,3,4],[4,5,6]])

In [15]: arr2[:2]
Out[15]: 
array([[1, 2, 3],
       [2, 3, 4]])

切片是沿着一个轴向选取元素的,我们在高维数组中也可以一次传入多个切片,作为索引。

In [16]: arr2[:2,1:]
Out[16]: 
array([[2, 3],
       [3, 4]])

只有冒号时表示选取了整个轴。

布尔型索引

In [26]: ch=np.array(['a','a','b','c','d','g','a'])

In [27]: data=randn(7,4)

In [28]: ch=='a'
Out[28]: array([ True,  True, False, False, False, False,  True], dtype=bool)

In [29]: data
Out[29]: 
array([[-1.02076513,  0.19244239,  0.08242597, -0.41673086],
       [ 1.19849582, -0.72313653,  0.32134828,  2.49317835],
       [ 0.48312431, -0.25152316,  0.61829   , -0.07175601],
       [ 0.89039771,  0.60401248,  1.04225478, -0.80202465],
       [-0.32040537,  0.48092997,  1.39808417,  0.65499188],
       [-0.64605159, -0.53074611,  0.51109089,  0.03693914],
       [-1.27989762,  0.05983575,  1.91029733,  0.44180378]])

In [30]: data[ch=='a']
Out[30]: 
array([[-1.02076513,  0.19244239,  0.08242597, -0.41673086],
       [ 1.19849582, -0.72313653,  0.32134828,  2.49317835],
       [-1.27989762,  0.05983575,  1.91029733,  0.44180378]])

布尔型的数组可以用于数组索引,但是这个数组的长度必须和被索引的轴的长度一致,而且可以与其他的索引方式混合使用。
注意:python中的关键字and和or在布尔型数组中无效。
我们可以使用布尔型索引来对数组设置一些值,比如我需要将ch数组中不为’a’的值统统修改为’b’

In [31]: ch[ch!='a']='b'

In [32]: ch
Out[32]: 
array(['a', 'a', 'b', 'b', 'b', 'b', 'a'], 
      dtype='<U1')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值