030、数组排序
本文最后更新于 67 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

数组排序

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

sort 函数

先看这个例子:

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

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

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

argsort 函数

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

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

可以用它来进行索引:

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

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

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

sort 和 argsort 方法

数组也支持方法操作:

data = array([20.8,  93.2,  53.4,  61.8])
data.argsort()
array([0, 2, 3, 1], dtype=int64)

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

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

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

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

二维数组排序

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

a = array([
        [.2, .1, .5], 
        [.4, .8, .3],
        [.9, .6, .7]
    ])
a
array([[ 0.2,  0.1,  0.5],
       [ 0.4,  0.8,  0.3],
       [ 0.9,  0.6,  0.7]])

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

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

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

sort(a, axis = 0)
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 接受两个参数,其中,第一个必需是已排序的数组。

sorted_array = linspace(0,1,5)
values = array([.1,.8,.3,.12,.5,.25])
searchsorted(sorted_array, values)
array([1, 4, 2, 1, 2, 1], dtype=int64)

排序数组:

0 1 2 3 4
0.0 0.25 0.5 0.75 1.0

数值:

0.1 0.8 0.3 0.12 0.5 0.25
插入位置 1 4 2 1 2 1

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

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

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

不加括号,默认是元组:

bounds = .4, .6
bounds
(0.4, 0.6)

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

low_idx, high_idx = searchsorted(data, bounds)

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

data[low_idx:high_idx]
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])
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇