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)