Python中的Numpy(5.numpy排序)

1.ndarray的排序

'''1.排序'''
n1 = np.array([2, 5, 1, 7, 4])
print(n1)

def sortn(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

print(sortn(n1))

'''利用numpy里面的方法 降低运算的空间复杂度和时间复杂度'''
def sortnd(nd):
    for i in range(nd.size):
        # 切片  (i之后得到最小值的索引),这里用argmin()返回索引
        min_index = np.argmin(nd[i:])+i  # 加上i,是为了让索引对应起来
        nd[i],nd[min_index] = nd[min_index],nd[i]  # 把最小值进行调换
    return nd
print(sortnd(n1))

'''利用sort()排序,注意两只用法的区别'''
n2 = np.random.randint(0,150,10)
n2.sort()    # 1.没有返回值,直接对原数组进行排序
print(n2)   # 这时候打印n2时就已经排序了
n3 = np.random.randint(0,100,10)
print(n3)
n3_sort = np.sort(n3)  # 2.有返回值,不直接改变原数组
print(n3_sort)

'''
部分排序,np.partition(a,k)
        a: 为要排序的数组
        k: 在a数组的第k个位置上的值,
           比这个值小的放在这个值的前面
           比这个值大的放在后面,
           如果k为负数时,同理,只不过在a原数组的最后开始数(从1开始)
'''
n4 = np.random.randint(0,150,20)
print(n4)
n5 = np.partition(n4,6)
print(n5)
'''在n4数组的第6个位置上取出比它小的所有数(即进行一个切片)'''
n6 = np.partition(n4,6)[:6]
print(n6)
'''在n4数组的第6个位置上取出比它大的所有数(即进行一个切片)'''
n7 = np.partition(n4,6)[7:]
print(n7)

  

猜你喜欢

转载自blog.csdn.net/wei18791957243/article/details/83794348