ndarray的排序

import numpy as np

# def Sort()代码越短越好
# 普通的排序
n1 = np.array([2, 4, 5, 7, 1])

def sort(nd):
    for i in range(nd.size):
        for j in range(i, nd.size):
            if nd[i] > nd[j]:
                nd[i], nd[j] = nd[j], nd[i]
    return nd

sort(n1)
print(n1)

# 降低运算的空间复杂度和时间复杂度
n2 = np.array([8, 4, 5, 2, 9])

def sortnd(nd):
    for i in range(nd.size):
        # 切片:索引不对应
        min_index = np.argmin(nd[i:]) + i
        nd[i], nd[min_index] = nd[min_index], nd[i]
    return nd

sortnd(n2)
print(n2)


# 1.快速排序
# np.sort()与ndarray.sort()都可以,但有区别:
# np.sort()不改变输入
# ndarray.sort()本地处理,不占用空间,但改变输入
# 使用ndarray.sort(),原来的数据进行了改变,不占内存
n3 = np.random.randint(0, 150, size=10)
print(n3)
n3.sort()
print(n3)

n4 = np.array([[6, 3, 7], [2, 8, 1]])
np.sort(n4, kind='quicksort')
print(n4)


# 2.部分排序
# 有的时候我们不是对全部的数据感兴趣,我们可能只对最小或最大的一部分感兴趣
# 当k为正时,我们想要得到最小的k个数
# 当k为负时,我们想要得到最大的k个数
nd = np.random.randint(0, 150, size=10)
n5 = np.partition(nd, -5)  # 在后面得到最大的五个,但是不进行排序
print(nd)
print(n5)
print("\n")
n6 = np.partition(nd, 5)  # 在前面得到最小的五个数,但是不进行排序
print(nd)
print(n6)

n7 = np.partition(nd, 5)[:5]  # 进行切片,单独取出这五个数
np.sort(n7)  # 排序
print(n7)


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务