目录
一、 需要使用外部库 as 起别名
import numpy asnp
二、 定义一维数组
array = np.array([1,2,3,4]) #传入的是列表
print(type(array)) #<class 'numpy.ndarray'>
三、 定义多维数组
array2D = np.array([[1,2,3,4,5],[6,7,8,9,10]]) #N行*M列 需要严格对齐,不能[1,2,3,4,5],[6,7,8,9]
array3D = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]],dtype = np.int) #三维数组 可以用dtype = np. 指定数组类型,不加则自动确定类型
print(array3D)
print(array3D.shape) #数组形状
print(array3D.dtype) #数组类型
四、 特殊数组
#特殊数组
print(np.zeros(shape=(4,5))) #全0数组,zeros_like 建立与所给数组一样的全0数组
print(np.ones(shape = (5,5))) #全1数组,ones_like
print(np.identity(8)) # 8*8 对角线全为1的方阵
print(np.eye(4,5)) #主对角线全为1,不一定是方阵
print(np.sign(-100)) #判断数据的符号
print(np.diag([1,2,3,4,5])) #用传入的一维向量构造矩阵(值在主对角线)
五、 arange生成器
#arange生成器,生成numpy数组 range
arrayld = np.arange(1,21,1) #不包含上界(起始,结束,步长)
print(arrayld)
#重新指定数组形状
print(array2D.reshape(5,2))
#arange生成多维数组
print(np.arange(1,21,1).reshape(2,2,5))
六、 类型转换astype
#类型转换
print(arrayld)
floatarray = arrayld.astype(dtype = np.float)
print(floatarray)
七、 矢量化计算
#矢量化计算
array2d = np.arange(1,21,1).reshape(4,5)
print(array2d+array2d)
print(array2d-array2d)
print(array2d*array2d)
print(array2d/array2d)
array2d2= np.arange(2,22,1).reshape(4,5)
print(array2d2+array2d)
print(np.sqrt(array2d2)) #开方
八、 索引和切片
8.1. 一维数组的索引和切片
arrayld = np.arange(1,11,1)
print(arrayld[0]) #索引
print(arrayld[5:11:1]) #i切片[下界,上界),步长
arrayld[5::1] = 10 #批量赋值,不写上界,表示切到末尾
print((arrayld))
arrayld[:] = 0 #:表示全切,切片全区域赋值
print(arrayld)
数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会反映到源数组上。
想要不修改,需要使用.copy()
#.copy()后修改arr,不会修改原arrayld
arr = arrayld[:].copy()
arr[:] = 1
print(arrayld)
print(arr)
arr = arrayld[:]
arr[:] = 1
print(arrayld)
print(arr)
8.2. 二维数组的索引和切片
二维数组对象[二维度下标索引值,一维度元素下标索引值]
#二维数组的索引arr[0][2]或arr[0,2] 可以用逗号
array2D = np.array([[1,2,3,4,5],
[6,7,8,9,10]])
print(array2D[0::1,2:]) #前面行,后面列::步长,2:表示取后面所有
print(array2D[0::1,:2])
8.3. 三维数组的索引和切片
三维度索引的 语法:数组对象[ 三维度轴索引值 ,二维度下标索引值,一维度元素下标索引值]
九、 补充(与或非)
#and or not
x=20
if x>10 and x<100: # &&
pass
if x>10 or x<-10: # ||
pass
if not x: # !
pass