一、 布尔索引
#布尔索引
#找出一组数里所有的偶数
arrayld = np.arange(1,21,1)
boolArray = (arrayld %2 == 0)
print((boolArray))
print(arrayld[boolArray])
#简写
print(arrayld[arrayld %2 == 0])
arratld = np.array(([1,23,4]))
print(arratld)
print(arratld[[True, False, True]])
print(arrayld[(arrayld %2 == 0) & (arrayld >10)])
#多维选取
array2D = np.arange(1,21,1).reshape(4,5)
print(array2D[array2D > 10])
print(array2D[(array2D %2 ==0) & (array2D > 15)])
二、 花式索引
#花式索引
array2D = np.array([[1, 2, 3, 4],
[11, 12, 13, 14],
[22, 23, 24, 25],
[22, 23, 24, 25]])
print(array2D[[1,2]]) #取1、2两行
print(array2D[[1,2],[1,2]]) #(1,1) (2,2)
print(array2D.shape)
三、 轴转换
3.1. 一维数组
可以用.T直接转置
array2d = np.array([[1,2,3,4],
[5,6,7,8]]) #2*4
print(array2d)
#4*2
print(array2d.T)
3.2. 二维数组
print(array2d.transpose(1, 0))
3.3. 三维数组
#三维数组
array3d = np.arange(1,21,1).reshape(2,2,5)
print(array3d)
print(array3d[0][0][0]) #下标:x、y、z
print(array3d.transpose(2,1,0)) #5*2*2 0:x 1:y 2:z
四、 文件操作
把数组中数据存放到文件中,从文件中读取数据
4.1. tofile、fromfile
#tofile fromfile
#二进制的存储,不能保存形状
array2d = np.arange(1,21,1).reshape(4,5)
array2d.tofile('a.bin')
print(array2d)
array = np.fromfile('a.bin',dtype=int)
print(array) #tofile没有格式化,fromfile时需要格式化
#读出来是一维数组
4.2. save、load
#save load 能保存形状、类型 缺点:不兼容其他语言
np.save('a.npy',array2d)
array = np.load('a.npy')
print(array2d)
print(array2d.shape)
print(array2d.dtype)
4.3. savez
#savez() 保存多个文件 ,第一个参数:文件名 之后参数:数组
c = np.array([[1.0,2.0,3.0]],dtype = np.float)
np.savez('a.npz',array2d ,array, arrc = c )
arrs = np.load('a.npz')
#读出:
print(arrs['arr_0']) #写了 xx=xxx,则用 print(arrs['xx']),不然就arr_0、arr_1、arr_2、arr_3、arr_4....
print(arrs['arr_1'])
print(arrs['arrc'])
4.4. csv
#csv是一个通用数据格式 csv本质是txt文件,特殊处是它内部以,作为分隔符
np.savetxt('a.csv',array2d ,delimiter="," , newline='\n') #delimiter指定分隔符,不指定则默认空格,newline指定换行符
array = np.loadtxt('a.csv',delimiter=",")
print(array)
np.savetxt('test.csv',array2d ,delimiter=" " , newline=' 00 ')
五、 常用函数
5.1. 激活函数、e**x、开方sqrt()
#激活函数:
def sigmod():
return 1/(1 + np.exp(-x))
pass
#e**x
print(np.exp(1))
print(np.exp([1,2,3,4,5,6,7,8,9,10])) #可以传数组
#开方:sqrt()
5.2. 加减乘除
可以用add等函数,也可以直接+-*/
arr1 = np.array([1,2,3,5])
arr2 = np.array([11,12,13,14])
print(arr1+arr2)
print(np.add(arr1,arr2))
5.3. random
arr3 = np.random.uniform(0,2,size=(4,5)) #随机生成浮点数
arr4 = np.random.randint(1,10,size=(4,5)) #随机生成整数
print(arr3)
print(arr4)
5.4. modf
y1 ,y2 =np.modf(arr3)
print(y1, y2) #y1:小数部分,y2:整数部分
5.5. 小补充:函数可以有多个返回结果、默认返回None
#函数可以有多个返回结果
def sum(x,y):
return x,y,x+y,x*y,x/y
arr = sum(10,20)
print(arr) #会封装成一个元组
y1,y2,y3,y4,y5 = sum(10,20) #y1~5会分别接收x,y,x+y,x*y,x/y
def test(): #默认返回None ==》null
pass #所以python一定有返回值
a = None
5.6. power()
#x**y
print(np.power(2,10))
print(np.power([1,5,21],10))
print(np.array([1,2,3,4])**10)
5.7. meshgrid() 生成网格点
#meshgrid()
array = np.array([1,2,3])
xs, ys = np.meshgrid(array,array)
print(xs)
print(ys)
5.8. numpy.where()
#np where if elif elif elif ... else
array = np.array([10,100,50,90,80,55,70])
print(np.where(array>=90,'优秀','一般'))
print(np.where(array>=90,'优秀',array))
print(np.where(array>=90,'优秀',np.where(array>=80,'良好',np.where(array>=70,'一般',array))))
5.9. 求平均值、和、标准差、方差
#一维:
print(np.sum(array)) #和
print(np.mean(array)) #平均值
print(np.std(array)) #标准差
print(np.var(array)) #方差
#二维
array2d = np.arange(1,11).reshape(2,5)
print(np.mean(array2d,axis=0)) #axis=0每列按列求平均,1:按行求平均;0:列,1:行,2:轴
print(np.mean(array2d,axis=1))
5.10. 最大值索引、最小值索引/分类问题
array = np.array([1,2,3,4,5,1000,100])
print(np.argmax(array))
print(np.argmin(array))
5.11. 小技巧:快速求大于5的数的个数
print((array>5).sum())
#即:
boolarray = np.array(array>5)
print(boolarray.sum())
5.12. any、all、sort、numpy.unique()
#any()检测数组中是否存在一个或多个True值
#all()用于检测数组中所有值是否为True
#sort
array.sort()
print(array)
#numpy.unique()找出数组中的唯一值(去重),并返回已排序结果,
print(np.unique(array))