numpy数组的排序,搜索,元素抽取

排序

numpy的排序函数

sort函数返回排序后的数组

lexsort函数根据键值的字典序进行排序

argsort函数返回数组排序后的下标

ndarray类的sort方法可以对数组进行原地排序

msort函数沿着第一个轴排序

sort_complex函数对复数按照先实部后虚部的顺序进行排序

Key_Function

lexsort函数根据键值的字典序进行排序

  将两个数组构成的元组, 分别取出对应下标的元素, 第一个数组的看做key, 第二个数组看做value

  然后按照value进行排序, 返回排序后的数组下标

  字典序就是按value进行排序

Code

import numpy as np
import datetime

def datestr2num(s):
    s = s.decode("utf-8")
    return datetime.datetime.strptime(s, "%d-%m-%Y").toordinal()
    
dates, closes = np.loadtxt("AAPL.csv", delimiter=',', usecols=(1, 5), 
                           converters={1:datestr2num}, unpack=True)
indices = np.lexsort((dates, closes))
print(indices)
'''
[ 0 16  1 17 18  4  3  2  5 28 19 21 15  6 29 22 27 20  9  7 25 26 10  8 14
 11 23 12 24 13]
'''
l=[(datetime.date.fromordinal(int(dates[i])), closes[i]) for i in indices]
print(l)
'''
[(datetime.date(2011, 1, 28), 336.10000000000002), 
(datetime.date(2011, 2, 22), 338.61000000000001), 
(datetime.date(2011, 1, 31), 339.31999999999999), 
(datetime.date(2011, 2, 23), 342.62), 
(datetime.date(2011, 2, 24), 342.88), 
(datetime.date(2011, 2, 3), 343.44), 
(datetime.date(2011, 2, 2), 344.31999999999999), 
(datetime.date(2011, 2, 1), 345.02999999999997), 
(datetime.date(2011, 2, 4), 346.5), 
(datetime.date(2011, 3, 10), 346.67000000000002), 
(datetime.date(2011, 2, 25), 348.16000000000003), 
(datetime.date(2011, 3, 1), 349.31), 
(datetime.date(2011, 2, 18), 350.56), 
(datetime.date(2011, 2, 7), 351.88), 
(datetime.date(2011, 3, 11), 351.99000000000001), 
(datetime.date(2011, 3, 2), 352.12), 
(datetime.date(2011, 3, 9), 352.47000000000003), 
(datetime.date(2011, 2, 28), 353.20999999999998), 
(datetime.date(2011, 2, 10), 354.54000000000002), 
(datetime.date(2011, 2, 8), 355.19999999999999), 
(datetime.date(2011, 3, 7), 355.36000000000001), 
(datetime.date(2011, 3, 8), 355.75999999999999), 
(datetime.date(2011, 2, 11), 356.85000000000002), 
(datetime.date(2011, 2, 9), 358.16000000000003), 
(datetime.date(2011, 2, 17), 358.30000000000001), 
(datetime.date(2011, 2, 14), 359.18000000000001), 
(datetime.date(2011, 3, 3), 359.56), 
(datetime.date(2011, 2, 15), 359.89999999999998), 
(datetime.date(2011, 3, 4), 360.0), 
(datetime.date(2011, 2, 16), 363.13)]
'''

 

对复数进行排序

复数包含实数部分和虚数部分

NumPy中有复数类型, 使用两个浮点数来表示复数.

Key_Function

sort_complex函数对复数进行排序, 按照先实部后虚部的顺序排序

Code

import numpy as np

np.random.seed(42)
# 随机数种子, 使用随机数种子, 不管参数如何, 都会生成固定顺序的随机数数组
# 参数只是起始随机数在随机数数组中的位置
# 同一个随机数种子, 反复取随机数, 肯定结果是不同的
# 可能因为所选取的随机数在随机数组中下标在递增
complex_numbers = np.random.random(5) + 1j * np.random.random(5)

print(complex_numbers)
'''
[ 0.37454012+0.15599452j  0.95071431+0.05808361j  0.73199394+0.86617615j
  0.59865848+0.60111501j  0.15601864+0.70807258j]
'''
print(np.sort_complex(complex_numbers))
'''
[ 0.15601864+0.70807258j  0.37454012+0.15599452j  0.59865848+0.60111501j
  0.73199394+0.86617615j  0.95071431+0.05808361j]
'''

 

numpy数组中搜索

argmax函数返回数组中最大值对应的下标

a = np.array([2, 4, 8])
np.argmax(a)
# 2

nanargmax函数, 会忽略NaN值

b = np.array([np.nan, 2, 4])
np.nanargmax(b)
# 2

argmin和nanargmin函数, 返回数组中最小值对应的下标

argwhere函数根据搜索条件搜索非零的元素, 并分组返回对应的下标

a = np.array([2, 4, 8])
np.argwhere(a <= 4)
'''
[[0]
 [1]]
'''

searchsort函数可以为指定的插入值寻找维持数组排序的索引位置

extract函数返回满足指定条件的数组元素

Key_Function

searchsorted函数, 返回一个索引位置, 将元素插入这个位置的话, 不改变原数组的有序性

Code

import numpy as np

a = np.arange(5)
print(a)
# [0 1 2 3 4]
indices = np.searchsorted(a, [-2, 7])
print(indices)
# [0 5]
print(np.insert(a, indices, [-2, 7]))
# [-2  0  1  2  3  4  7]

 

numpy中数组元素抽取

Key_Function

extract函数可以根据某个条件从数组中抽取元素.

  这个函数和where函数相似

nonzero函数专门用来抽取非零的数组元素

Code

import numpy as np

a = np.arange(7)
print(a)
# [0 1 2 3 4 5 6]
condition = (a % 2) == 0
print(condition)
# [ True False  True False  True False  True]
print(np.extract(condition, a)) # 指定了布尔条件从数组中抽取偶数元素
# [0 2 4 6]
print(np.nonzero(a))
# (array([1, 2, 3, 4, 5, 6]),)

 

转载于:https://www.cnblogs.com/draven123/p/11421455.html

NumPyPython中用于科学计算的一个重要库,它提供了高性能的多维数组对象以及对这些数组进行操作的函数NumPy数组排序是对数组元素进行排序的操作,可以按照升序或降序排列。 NumPy提供了多种排序函数,其中最常用的是`np.sort()`函数和`ndarray.sort()`方法。`np.sort()`函数返回一个已排序数组副本,而`ndarray.sort()`方法则直接在原数组上进行排序。 对于结构化数组,它是一种特殊类型的NumPy数组,其中每个元素都可以包含多个字段。结构化数组可以通过定义dtype(数据类型)来创建,每个字段都有一个名称和一个数据类型。 下面是对NumPy数组排序和结构化数组的介绍: 1. NumPy数组排序: - `np.sort()`函数:返回一个已排序数组副本,不改变原数组。 - `ndarray.sort()`方法:直接在原数组上进行排序,不返回副本。 - 可以指定`axis`参数来沿着指定轴进行排序。 - 可以使用`kind`参数指定排序算法,如快速排序('quicksort')、归并排序('mergesort')或堆排序('heapsort')。 - 可以使用`order`参数指定按照某个字段进行排序。 2. 结构化数组: - 结构化数组是一种特殊类型的NumPy数组,每个元素都可以包含多个字段。 - 可以通过定义dtype来创建结构化数组,每个字段都有一个名称和一个数据类型。 - 可以使用`np.dtype()`函数定义dtype,指定字段名称和数据类型。 - 可以通过索引或字段名称访问结构化数组元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值