返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

数组排序

发布于 2022-09-03 20:46:13 字数 7354 浏览 0 评论 0 收藏 0

In [1]:

%pylab
Using matplotlib backend: Qt4Agg
Populating the interactive namespace from numpy and matplotlib

sort 函数

先看这个例子:

In [2]:

names = array(['bob', 'sue', 'jan', 'ad'])
weights = array([20.8, 93.2, 53.4, 61.8])

sort(weights)

Out[2]:

array([ 20.8,  53.4,  61.8,  93.2])

sort 返回的结果是从小到大排列的。

argsort 函数

argsort 返回从小到大的排列在数组中的索引位置:

In [3]:

ordered_indices = argsort(weights)
ordered_indices

Out[3]:

array([0, 2, 3, 1], dtype=int64)

可以用它来进行索引:

In [4]:

weights[ordered_indices]

Out[4]:

array([ 20.8,  53.4,  61.8,  93.2])

In [5]:

names[ordered_indices]

Out[5]:

array(['bob', 'jan', 'ad', 'sue'], 
      dtype='|S3')

使用函数并不会改变原来数组的值:

In [6]:

weights

Out[6]:

array([ 20.8,  93.2,  53.4,  61.8])

sort 和 argsort 方法

数组也支持方法操作:

In [7]:

data = array([20.8,  93.2,  53.4,  61.8])
data.argsort()

Out[7]:

array([0, 2, 3, 1], dtype=int64)

argsort 方法与 argsort 函数的使用没什么区别,也不会改变数组的值。

In [8]:

data

Out[8]:

array([ 20.8,  93.2,  53.4,  61.8])

但是 sort方法会改变数组的值:

In [9]:

data.sort()

In [10]:

data

Out[10]:

array([ 20.8,  53.4,  61.8,  93.2])

二维数组排序

对于多维数组,sort方法默认沿着最后一维开始排序:

In [11]:

a = array([
        [.2, .1, .5], 
        [.4, .8, .3],
        [.9, .6, .7]
    ])
a

Out[11]:

array([[ 0.2,  0.1,  0.5],
       [ 0.4,  0.8,  0.3],
       [ 0.9,  0.6,  0.7]])

对于二维数组,默认相当于对每一行进行排序:

In [12]:

sort(a)

Out[12]:

array([[ 0.1,  0.2,  0.5],
       [ 0.3,  0.4,  0.8],
       [ 0.6,  0.7,  0.9]])

改变轴,对每一列进行排序:

In [13]:

sort(a, axis = 0)

Out[13]:

array([[ 0.2,  0.1,  0.3],
       [ 0.4,  0.6,  0.5],
       [ 0.9,  0.8,  0.7]])

searchsorted 函数

searchsorted(sorted_array, values)

searchsorted 接受两个参数,其中,第一个必需是已排序的数组。

In [14]:

sorted_array = linspace(0,1,5)
values = array([.1,.8,.3,.12,.5,.25])

In [15]:

searchsorted(sorted_array, values)

Out[15]:

array([1, 4, 2, 1, 2, 1], dtype=int64)

排序数组:

01234
0.00.250.50.751.0

数值:

0.10.80.30.120.50.25
插入位置142121

searchsorted 返回的值相当于保持第一个数组的排序性质不变,将第二个数组中的值插入第一个数组中的位置:

例如 0.1 在 [0.0, 0.25) 之间,所以插入时应当放在第一个数组的索引 1 处,故第一个返回值为 1

In [16]:

from numpy.random import rand
data = rand(100)
data.sort()

不加括号,默认是元组:

In [17]:

bounds = .4, .6
bounds

Out[17]:

(0.4, 0.6)

返回这两个值对应的插入位置:

In [18]:

low_idx, high_idx = searchsorted(data, bounds)

利用插入位置,将数组中所有在这两个值之间的值提取出来:

In [19]:

data[low_idx:high_idx]

Out[19]:

array([ 0.41122674,  0.4395727 ,  0.45609773,  0.45707137,  0.45772076,
        0.46029997,  0.46757401,  0.47525517,  0.4969198 ,  0.53068779,
        0.55764166,  0.56288568,  0.56506548,  0.57003042,  0.58035233,
        0.59279233,  0.59548555])

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文