基本操作
导入 numpy 库
import numpy as np
一维数组创建
array = np.array([1,7,3,2,4])
array = np.arange(1,10,0.5) #arange(起点,终点,步长) 步长默认为1,终点不取
array = np.linspace(1,2,3) #在1,2和之间产生等间隔的3个数
还可以创建非整型的数组
mask = np.array([1,0,1,0,1,1],dtype=bool)
这会创建一个布尔型数组
array([ True False True False True True])
二维矩阵创建
array = np.array([[1,2],[2,1]]) # 这是一个列表嵌套array([list1,list2])
array = np.zeros((3,3)) # 3*3的零矩阵
array = np.ones((3,3)) # 3*3的单位矩阵
array = np.identity(3) # 主对角线为1的3*3矩阵
array = np.random.rand(3,2) # (3,2)表示矩阵大小
对于zeros和ones,还有扩展_like使其大小与某数组一致
例如
demo = np.array([[1,2],[3,4]])
array = np.zeros_like(demo) # 会生成一个与demo相同大小的2*2零矩阵
数组预览
array=np.array([[1,2,3],[4,5,6]])
对上面的数据就行预览的几种方法
array.shape
shape属性会返回一个(2,3),即2行3列——注意不要使用成shape()
array.size
size属性返回元素数,在本例中共6个元素,会返回一个整型6
与此相对的还有ndim
array.ndim
会返回维度,在本例中是2
array.dtyoe
dtype返回当前数据格式,本例中是int32
索引与切片
和Python一样,在Numpy中也有语法类似的切片
array1 = np.array([1,2,3,4,5,6])
array2 = np.array([[1,2,3],[4,5,6]])
不难看出,对于一维和二维的数据,切片时相当于列表嵌套
array1[1] # [2]
array1[1:3] # [2 3]
array1[2:6:2} # [3 5]
array1[-1:3:-1] # [6 5]
而在array2中
array2[1] # [4 5 6]
array2[1][2] # [6]
可以使用前面提到的创建布尔类型来进行索引
array = np.arange(0,100,10) # array([ 0 10 20 30 40 50 60 70 80 90])
mask = np.array([0,0,0,1,1,1,0,0,0,1],dtype=bool)
out = array[mask]
最终out变量存入的会是array([30 40 50 90])
out = np.where(array > 60) # (array([7, 8, 9], dtype=int64),)
where函数会提供符合条件的索引
out = array[np.where(array > 60)]
这样可以直接得出符合条件的元素
另外,bool类型还可以用在两个数组的对比上
x = np.array([0,1,2,3,4])
y = np.array([0,1,1,2,4))
out = x == y
[ True True False False True]
x = np.array([0,1,2,3,4])
y = np.array([0,0,1,2,4])
out1 = np.logical_and(x,y)
out2 = np.logical_or(x,y)
[False False True True True]
[False True True True True]
拓展
Numpy再使用random模块,可以实现随机取样
array = np.array([0,1,2,3,4,5,6,7,8,9])
random_array = np.random.rand(10) # 随机生成一个每位的范围在0-1的数组
mask = random_array > 0.5 # 大于0.5为True,反之False
array = array[mask]
结果可以自行测试