数据分析(三)--numpy进阶part2

本文深入探讨Numpy的花哨索引,包括利用索引数组获取和修改数组值,以及结合不同索引方式的组合操作。同时讲解了数组的排序,如快速排序和部分排序(分隔),并展示了如何使用np.sort和np.partition函数进行排序和找到数组中第K小的元素。
摘要由CSDN通过智能技术生成

Numpy进阶part2

1. 花哨的索引

我们知道如何利用简单的索引值(如 arr[0])、切片(如 arr[:5])和布尔掩码(如 arr[arr > 0])获得并修改部分数组。

这里介绍的花哨的索引和前面那些简单的索引非常类似,但是传递的是索引数组,而不是单个标量。花哨的索引让我们能够快速获得并修改复杂的数组值的子数据集。

1.1 探索花哨的索引

花哨的索引在概念上非常简单,它意味着传递一个索引数组来一次性获得多个数组元素。
例如以下数组:

In[1]: import numpy as np
    rand = np.random.RandomState(42)
    x = rand.randint(100, size=10)
    print(x)
[51 92 14 71 60 20 82 86 74 74]

#假设我们希望获得三个不同的元素,可以用以下方式实现:
In[2]: [x[3], x[7], x[2]]
Out[2]: [71, 86, 14]

#另外一种方法是通过传递索引的单个列表或数组来获得同样的结果:
In[3]: ind = [3, 7, 4]
    x[ind]
Out[3]: array([71, 86, 60])

利用花哨的索引,结果的形状与索引数组的形状一致,而不是与被索引数组的形状一致:

In[4]: ind = np.array([[3, 7],[4, 5]])
    x[ind]
Out[4]: array([[71, 86],[60, 20]])

# 花哨的索引也对多个维度适用。假设我们有以下数组:
In[5]: X = np.arange(12).reshape((3, 4))
      X
Out[5]: array([[ 0, 1, 2, 3],
              [ 4, 5, 6, 7],
              [ 8, 9, 10, 11]])

和标准的索引方式一样,第一个索引指的是行,第二个索引指的是列:

In[6]: row = np.array([0, 1, 2])
    col = np.array([2, 1, 3])
    X[row, col]
Out[6]: array([ 2, 5, 11])

这里需要注意,结果的第一个值是 X[0, 2],第二个值是 X[1, 1],第三个值是 X[2, 3]。在花哨的索引中,索引值的配对遵循 2.5 节介绍过的广播的规则。因此当我们将一个列向量和一个行向量组合在一个索引中时&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值