1. 程式人生 > >Python中的Numpy(5.numpy排序)

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)