0.任务需求
长期以来,使用numpy的机会比较多,但是因为个人原因,经常是间隔一段时间才会继续使用python 工具进行编程。
每一次使用前都会因为对于numpy工具的不熟悉,需要重新调试和学习使用numpy的方法。
本文的目的在于记录numpy 中自己经常使用,但是又可能频繁不确定,需要重新调试的函数和功能。
首先系统的使用和了解推荐numpy教程如下:
numpy使用教程
1.创建数组
a = np.zeros((3,2,2))
b = np.ones((2,4))
注意:一定要在括号里面再加一层括号,表示数组形状
2.数组求和
import numpy as np
a = np.reshape(np.array(range(27)), [3, 3, 3])
print("原来的a:{}".format(a))
print("沿着轴0求和:{}".format(np.sum(a, 0)))
print("沿着轴1求和:{}".format(np.sum(a, 1)))
print("沿着轴2求和:{}".format(np.sum(a, 2)))
输出:
原来的a:[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]][[ 9 10 11]
[12 13 14]
[15 16 17]][[18 19 20]
[21 22 23]
[24 25 26]]]
沿着轴0求和:[[27 30 33]
[36 39 42]
[45 48 51]]
沿着轴1求和:[[ 9 12 15]
[36 39 42]
[63 66 69]]
沿着轴2求和:[[ 3 12 21]
[30 39 48]
[57 66 75]]
感受:
1.轴0求和,像是沿着z轴
2.轴1求和,像是沿着x轴
3.轴2求和,像是沿着y轴
3.数组索引
import numpy as np
a = np.array([1,23,3])
print('a:',a)
print(a[0:2])
a = np.array([[1,2,3],[4,5,6]])
print('a:',a)
print(a[0:1,2:3])
输出:
a: [ 1 23 3]
[ 1 23]
a: [[1 2 3]
[4 5 6]]
[[3]]
4.数组排序
4.1 np.argsort
注意:这里的索引意思是指在对应的位置上 放上排序好的对应数字的索引。
import numpy as np
array = np.array([[7,1,2],[0,0,1],[1,1,3]])
print("Array before sorting\n",array)
index = np.argsort(array,axis=0)
print('沿着轴0排序',index)
index = np.argsort(array,axis=1)
print('沿着轴1排序',index)
输出:
Array before sorting
[[7 1 2]
[0 0 1]
[1 1 3]]
沿着轴0(列)排序 [[1 1 1]
[2 0 0]
[0 2 2]]
沿着轴1(行)排序 [[1 2 0]
[0 1 2]
[0 1 2]]
4.2 np.sort
import numpy as np
array = np.array([[7,1,2],[0,0,1],[1,1,3]])
print("Array before sorting\n",array)
index = np.sort(array,axis=0)
print('沿着轴0排序',index)
index = np.sort(array,axis=1)
print('沿着轴1排序',index)
输出:
沿着轴0排序 [[0 0 1]
[1 1 2]
[7 1 3]]
沿着轴1排序 [[1 2 7]
[0 0 1]
[1 1 3]]
5.数组添加
import numpy as np
a = [1, 2, 3]
b = [4, 5]
c = [[6, 7], [8, 9]]
d = [[10, 11], [12, 13]]
print('在一维数组a后添加values,结果如下:{}'.format(np.append(a, b, axis=0)))
print('沿二维数组c的行方向添加values结果如下:{}'.format(np.append(c, d, axis=0)))
print('沿二维数组c的列方向添加values结果如下:{}'.format(np.append(c, d, axis=1)))
# print('使用了axis,若arr和values的形状不同,则报错:'.format(np.append(a,c,axis=0)))
输出:
在一维数组a后添加values,结果如下:[1 2 3 4 5]
沿二维数组c的行方向添加values结果如下:[[ 6 7]
[ 8 9]
[10 11]
[12 13]]
沿二维数组c的列方向添加values结果如下:[[ 6 7 10 11]
[ 8 9 12 13]]
6.查找数据
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(np.where(a < 3))
print(type(np.where(a < 3)))
print(np.where(a < 3)[0])
print(type(np.where(a < 3)[0]))
x = np.arange(9.).reshape(3, 3)
print(x)
print(np.where(x > 5))
输出:
(array([0, 1], dtype=int64),)
<class ‘tuple’>
[0 1]
<class ‘numpy.ndarray’>
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
(array([2, 2, 2], dtype=int64), array([0, 1, 2], dtype=int64))
总结:
- np.where()得到的是元组,数值表示满足查找条件的行索引和列索引。
- 利用这个性质,对于1维数组,获取满足条件的行索引,其实就是获取了数组的索引。