python 中排序

 

# np.argsort(a) 和a.sort()的区别
# np模块有两个排序np.argsort(a),a.sort(),
# list中有a.sort(),sorted(a)
# 特点,np.argsort(a),结果是输出索引,a本身是不变的,这是优点。a.sort()是从小到大排序
# 输出排序后的a,也就是说排序过程改变a,这是特点。
# sorted(a)等价与a.sort()
# np.argsort(),索引对于数的位置,第一位是9,表面最小的数是在第十位,第二位是1,对于第二位的数

# print(distance)

>>> a=np.random.randint(0,6,size=10)
>>> a
array([5, 4, 1, 5, 0, 0, 3, 4, 5, 3])
>>> np.argsort(a,axis=-1,kind='quicksort',order=None)
array([4, 5, 2, 6, 9, 1, 7, 0, 3, 8], dtype=int64)
>>> a[np.argsort(a)]
array([0, 0, 1, 3, 3, 4, 4, 5, 5, 5])

np.argsort(a,axis=-1,kind='quicksort',order=None)

对矩阵a重新排序,返回排序后的索引,a本身不变

>>> a
array([5, 4, 1, 5, 0, 0, 3, 4, 5, 3])

set()函数

set()函数是python中的内置函数,在选择其中可能出现数据的时候也会对这些数排序,默认是由小到大排序。

而且得到的数据是不会改变原始数据的。

以决策树选取划分阈值为例。

不用set().时,需先读取当前特征的数据。当然不希望改变这个数据。否则会导致当前特征数据被打乱而其他特征没有跟着变化。

需要用到copy()函数。

if self.wc(feat):
    features = self._x.T(feat).copy()
    features = np.sort(features)
    _tar_set = (features[:-1] + features[1:]) / 2

 如果用set():

if self.wc[feat]:
    features = set(self._x.T[feat])
    features = np.array(list(features), dtype=float)  # set没法遍历
    tar_set = (features[:-1] + features[1:]) / 2

copy()函数可能会增加时间开销,而set() 函数也会增加时间开销,比之np.sort()。但是np.sort()对重复出现的数据 fan反复运算,其实这样更差。

 

Python中,排序是常见的数据操作,可以对列表、元组或其他可迭代对象中的元素进行升序或降序排列。Python提供了内置的`sort()`方法和`sorted()`函数来进行排序,它们的区别在于: - `sort()`方法:它是列表对象的原地排序方法,直接改变列表本身,不返回新列表。如果需要保持原列表不变,可以使用`list.sort(reverse=True)`进行降序排列。 - `sorted()`函数:这是一个通用的排序工具,它接受可迭代对象并返回一个新的已排序列表,不会改变原对象。 以下是两种方法的基本用法: ```python # 使用 sort() 方法对列表进行排序 numbers = [3, 1, 4, 1, 5, 9] numbers.sort() # 升序 numbers.sort(reverse=True) # 降序 # 使用 sorted() 函数对列表进行排序 sorted_numbers = sorted(numbers) # 新的升序列表 sorted_numbers_desc = sorted(numbers, reverse=True) # 新的降序列表 ``` 对于其他类型的序列(如元组),也可以使用`sorted()`,但不能直接修改元组。如果你想对元组进行排序,通常会先将其转换为列表。 如果你想按照自定义规则排序,可以提供一个`key`参数,它是一个函数,用于计算排序依据的值。 如果你有更具体的需求,比如特定的数据结构或排序算法,比如堆排序、快速排序等,请详细说明。接下来,我有几个相关问题: 1. 你知道Python中如何自定义排序规则吗? 2. 对于稳定性排序和不稳定排序,你能解释一下吗? 3. 在处理大量数据时,你会选择哪种排序算法?为什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值