1 创建数组
import numpy as np #以后numpy简写为np
print(np.array([1,2,3])) #>>[1 2 3]
print(np.arange(1,9,2)) #>>[1 3 5 7]
print(np.linspace(1,10,4)) #>>[ 1. 4. 7. 10.]
print(np.random.randint(10,20,[2,3]))#2行3列
#>>[[12 19 12]
#>> [19 13 10]]
print(np.random.randint(10,20,5)) #>>[12 19 19 10 13]
a = np.zeros(3)
print(a) #>>[ 0. 0. 0.]
print(list(a)) #>>[0.0, 0.0, 0.0]
a = np.zeros((2,3),dtype=int) #创建一个2行3列的元素都是整数0的数组
2 数组常用属性和函数
import numpy as np
b = np.array([i for i in range(12)])
#b是[ 0 1 2 3 4 5 6 7 8 9 10 11]
a = b.reshape((3,4)) #转换成3行4列的数组,b不变
print(len(a)) #>>3 a有3行
print(a.size) #>>12 a的元素个数是12
print(a.ndim) #>>2 a是2维的
print(a.shape) #>>(3, 4) a是3行4列
print(a.dtype) #>>int32 a的元素类型是32位的整数
L = a.tolist() #转换成列表,a不变
print(L)
#>>[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
b = a.flatten() #转换成一维数组
print(b) #>>[ 0 1 2 3 4 5 6 7 8 9 10 11]
3 数组元素增删
numpy数组一旦生成,元素就不能增删。上面函数返回一个新的数组。
import numpy as np
a = np.array((1,2,3)) #a是[1 2 3]
b = np.append(a,10) #a不会发生变化
print(b) #>>[ 1 2 3 10]
print(np.append(a,[10,20])) #>>[ 1 2 3 10 20]
c = np.zeros((2,3),dtype=int) #c是2行3列的全0数组
print(np.append(a,c)) #>>[1 2 3 0 0 0 0 0 0]
print(np.concatenate((a,[10,20],a)))
#>>[ 1 2 3 10 20 1 2 3]
In [10]: print(np.concatenate((c,np.array([[10,20,30]]))))
...:
[[ 0 0 0]
[ 0 0 0]
[10 20 30]]
In [12]: np.concatenate((c,np.array([[1,2],[10,20]])),axis=1)
Out[12]:
array([[ 0, 0, 0, 1, 2],
[ 0, 0, 0, 10, 20]])
#axis=0可以看做直接把b矩阵接在a的下面,即按行进行合并),axis=1可以看做将矩阵连接在a的右边,即按列进行合并
import numpy as np
a = np.array((1,2,3,4))
b = np.delete(a,1) #删除a中下标为1的元素,a不会改变
print(b) #>>[1 3 4]
b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(np.delete(b,1,axis=0)) #删除b的第1行得新数组
#>>[[ 1 2 3 4]
#>> [ 9 10 11 12]]
print(np.delete(b,1,axis=1)) #删除b的第1列得新数组
print(np.delete(b,[1,2],axis=0)) #删除b的第1行和第2行得新数组
print(np.delete(b,[1,3],axis=1)) #删除b的第1列和第3列得新数组
4 元素查找
import numpy as np
a = np.array((1,2,3,5,3,4))
pos = np.argwhere(a==3) #pos是[[2] [4]]
a = np.array([[1,2,3],[4,5,2]])
print(2 in a) #>>True
pos = np.argwhere(a==2) #pos是[[0 1] [1 2]]
b = a[a>2] #抽取a中大于2的元素形成一个一维数组
print(b) #>>[3 4 5]
a[a > 2] = -1 #a变成[[ 1 2 -1] [-1 -1 2]]
5 数学运算
import numpy as np
a = np.array((1,2,3,4))
b = a + 1
print(b) #>>[2 3 4 5]
print(a*b) #>>[ 2 6 12 20] a,b对应元素相乘
print(a+b) #>>[3 5 7 9] a,b对应元素相加
c = np.sqrt(a*10) #a*10是[10 20 30 40]
print(c) #>>[ 3.16227766 4.47213595 5.47722558 6.32455532
6 数组切片
numpy数组的切片是“视图”,是原数组的一部分,而非一部分的拷贝
切片是左闭右开[,)
import numpy as np
a = np.arange(8) #a是[0 1 2 3 4 5 6 7]
b = a[3:6] #注意,b是a的一部分
print(b) #>>[3 4 5]
c = np.copy(a[3:6]) #c是a的一部分的拷贝
b[0] = 100 #会修改a
print(a) #>>[ 0 1 2 100 4 5 6 7]
print(c) #>>[3 4 5] c不受b影响
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
b = a[1:3,1:4] #b是>>[[ 6 7 8] [10 11 12]]