##numpy笔记5
#排序
numpy.sort()
numpy.sort(a, axis, kind, order)
#a 要排序的数组
#axis 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序
#kind 默认为’quicksort’(快速排序)
#order 如果数组包含字段,则是要排序的字段
a = np.array([[3,7],[9,1]])
print(‘我们的数组是:’)
print(a)
print(‘调用 sort() 函数:’)
print(np.sort(a))
print(‘沿轴 0 排序:’)
print(np.sort(a, axis = 0))
#在 sort 函数中排序字段
dt = np.dtype([(‘name’, ‘S10’),(‘age’, int)])
a = np.array([(“raju”,21),(“anil”,25),(“ravi”, 17), (“amar”,27)], dtype = dt)
print(‘我们的数组是:’)
print(a)
print(‘按 name 排序:’)
print(np.sort(a, order = ‘name’))
#输出
#我们的数组是:
#[[3 7]
#[9 1]]
#调用 sort() 函数:
#[[3 7]
#[1 9]]
#沿轴 0 排序:
#[[3 1]
#[9 7]]
#我们的数组是:
#[(‘raju’, 21) (‘anil’, 25) (‘ravi’, 17) (‘amar’, 27)]
#按 name 排序:
#[(‘amar’, 27) (‘anil’, 25) (‘raju’, 21) (‘ravi’, 17)]
numpy.argsort()
#函数对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组
x = np.array([3, 1, 2])
print(‘我们的数组是:’)
print(x)
print(‘对 x 调用 argsort() 函数:’)
y = np.argsort(x)
print(y)
print(‘以排序后的顺序重构原数组:’)
print(x[y])
print(‘使用循环重构原数组:’)
for i in y:
print(x[i])
#输出
#我们的数组是:
#[3 1 2]
#对 x 调用 argsort() 函数:
#[1 2 0]
#以排序后的顺序重构原数组:
#[1 2 3]
#使用循环重构原数组:
#1 2 3
#numpy.extract()
#函数返回满足任何条件的元素
x = np.arange(9.).reshape(3, 3)
print(‘我们的数组是:’)
print(x)
#定义条件
condition = np.mod(x,2) == 0
print(‘按元素的条件值:’)
print(condition)
print(‘使用条件提取元素:’)
print(np.extract(condition, x))
#我们的数组是:
#[[ 0. 1. 2.]
#[ 3. 4. 5.]
#[ 6. 7. 8.]]
#按元素的条件值:
#[[ True False True]
#[False True False]
#[ True False True]]
#使用条件提取元素:
#[ 0. 2. 4. 6. 8.]
#副本和视图
#无复制
#简单的赋值不会创建数组对象的副本
#一个数组的任何变化都反映在另一个数组上。 例如,一个数组的形状改变也会改变另一个数组的形状
a = np.arange(6)
print(‘我们的数组是:’)
print(a)
print(‘调用 id() 函数:’)
print(id(a))
print(‘a 赋值给 b:’)
b = a
print(b)
print(‘b 拥有相同 id():’)
print(id(b))
print(‘修改 b 的形状:’)
b.shape = 3,2
print(b)
print(‘a 的形状也修改了:’)
print(a)
#输出
#我们的数组是:
#[0 1 2 3 4 5]
#调用 id() 函数:
#139747815479536
#a 赋值给 b:
#[0 1 2 3 4 5]
#b 拥有相同 id():
#139747815479536
#修改 b 的形状:
#[[0 1]
#[2 3]
#[4 5]]
#a 的形状也修改了:
#[[0 1]
#[2 3]
#[4 5]]
#视图或浅复制
ndarray.view()
#它是一个新的数组对象,并可查看原始数组的相同数据。 与前一种情况不同,新数组的维数更改不会更改原始数据的维数
b = a.view()
#数组的切片也会创建视图
a = np.array([[10,10], [2,3], [4,5]])
print(‘我们的数组:’)
print(a)
print(‘创建切片:’)
s = a[:, :2]
print(s)
#输出
#我们的数组:
#[[10 10]
#[ 2 3]
#[ 4 5]]
#创建切片:
#[[10 10]
#[ 2 3]
#[ 4 5]]
#深复制
ndarray.copy()
#函数创建一个深层副本。 它是数组及其数据的完整副本,不与原始数组共享
b = a.copy()
#矩阵库
#numpy.matlib,此模块的函数返回矩阵而不是返回ndarray对象
#线性代数
#numpy.linalg模块,提供线性代数所需的所有功能
IO
#load()和save()函数处理 numPy 二进制文件(带npy扩展名)
b = np.load(‘outfile.npy’)
a = np.array([1,2,3,4,5])
np.save(‘outfile’,a)
#loadtxt()和savetxt()函数处理正常的文本文件
a = np.array([1,2,3,4,5])
np.savetxt(‘out.txt’,a)
b = np.loadtxt(‘out.txt’)