数组的创建:
import numpy as np
#一维数组的创建:
arr1 = np.array([1,2,3,4])
#二维数组:
arr2 = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
数组的属性:
print('数组结构:',arr2.shape)
print('数组元素个数:',arr2.size)
print('数组元素类型:',arr2.dtype)
print('数组维度:',arr2.ndim)
print('数组元素大小:',arr2.itemsize)
#重设数组类型:
arr2.shape = 4,3
print('重设shape后的arr2为:', arr2)
numpy中自动生成数组的函数:
# (1)arange(起始值,终止值,步长)
print(np.arange(0,1,0.1))
# (2)生成等差数列:linspace(起始值,终止值,元素个数)
print(np.linspace(0,1,12))
#(3)等比数列:logspace(10^a, 10^b, 元素个数)
print(np.logspace(0, 1, 20))
#(4)全0数组:
print(np.zeros((2,3)))
#(5)全1数组:
print(np.ones((2,3)))
#(6)单位数组:一定是方阵,
print(np.eye(3))
#(7)对角数组:diag,一定是方阵
print(np.diag([1, 2, 3, 4]))
基于random模块,生成随机数
#(1)0,1之间随机数: np.random.random
print(np.random.random(100)).reshape(10,10) #维度
#(2)均匀分布:np.random.rand
print(np.random.rand(10,5))
#(3)正态分布: np.random.randn
print(np.random.randn(10,5))
#(4)随机整数: np.random.randint,注意 2<=x<10
print(np.random.randint(2,10,size=[2,5]))
数组索引
#一维数组索引:类似于列表切片
arr = np.arange(10)
print(arr[2:6])
#二维数组索引:
arr = np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
print('索引第1,2行的,第3、4列的元素为:',arr[1:, 3:] )
print(arr[(0,1,2),(1,2,3)]) ##返回 [ 2 6 10] #必须一一对应
mask = np.array([1,0,1], dtype = np.bool )
print(arr[np.ix_([0,3],[1,2])]) #返回2*2数组
变换数组形态
arr = np.arange(12)
print('新的二维数组为:', arr.reshape(3,4))
arr2 = arr.reshape(3,4)
print('展平后的数组为:', arr2.ravel()) #变成一维
print('展平后的数组为:',arr2.flatten('C')) ##默认为C,表示横向展平;
print('展平后的数组为:',arr2.flatten('F')) ##默认为C,表示纵向展平;
#拼接
arr3 = np.arange(12).reshape(3,4)
arr4 = 4*arr3
print('横向拼接:', np.hstack((arr3,arr4)))
print('纵向拼接:', np.vstack((arr3,arr4)))
print('横向拼接:',np.concatente((arr3,arr4),axis=1)) #axis =1,或 0
#分割
print(np.hsplit(arr,2)) #横向分割 必须分割后两个等宽
print(np.vsplit(arr,2)) #纵向分割
print(np.split(arr,2,axis = 1)) #横向分割
numpy 矩阵
print(np.mat("1 0 1;1 1 0;1 1 1"))
print(np.matrix([[1,2,3],[4,5,6],[7,8,9]]))
arr1 = np.eye(3)
arr2 = 3*arr1
print( np.bmat("arr1 arr2;arr2 arr1"))
矩阵的运算(针对所有元素的操作)
#1.乘以常数:
matr4 = matr1*2
print(matr4)
#2.加法/减运算
print(matr4+matr1)
print(matr4-matr1)
#3.乘法运算:
print(matr1*matr4)
#4.对应元素相乘:
print(np.multiply(matr4,matr1))
#矩阵属性
print('矩阵转置:\n', matr1.T)
print('矩阵求逆:\n', matr1.I)
ufunc 函数(通用函数)
ufunc针对数组所有元素的运算
#1、数组四则运算:
print(x+y)
print(x-y)
print(x*y)
print(x/y)
print(x**y)
#2、数组比较运算:
print(x < y)
print(x == y)
print(x >= y)
#3、逻辑运算:
print('逻辑and运算:', np.all(x==y))
print('逻辑or运算:', np.any(x==y))
#4.广播机制:
arr1 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,3]])
arr2 = np.array([1,2,3])
print(arr1+arr2)
numpy 简单的统计分析(排序与去重)
#排序:
arr3 = np.random.randint(1, 10, size=10)
arr3.sort()
print('排序后的数组为:',arr3)
arr4 = np.random.randint(1, 10, size=(3,3))
arr4.sort(axis = 0) #按列排序
print(arr3.argsort()) #argsort:返回重新排序后的下标;
#去重:
names = np.array(['小明', '小旭', '小刚', '小明', '小旭'])
print('去重之后的数组为:', np.unique(names))
#重复:
#(1)tile :针对整个数组重复,不针对单独元素重复
print('重复后的数组names为:\n', np.tile(names, 3))
#(2)repeat:主要针对元素重复:
arr = np.random.randint(0,10,size=(3,3))
print(arr)
print(arr.repeat(2, axis=0))##按行重复
print(arr.repeat(2, axis=1))##按列重复
常用统计函数
arr = np.arange(20).reshape(4,5)
print('求总和:', np.sum(arr))
print('按行求和:', np.sum(arr, axis=1))
print('求总均值:', np.mean(arr))
print('按行2求均值:', np.mean(arr, axis=1))
print('总标准差',np.std(arr))
print('按行求标准差',np.std(arr, axis=1))
print('方差:', np.var(arr))
print('按行求方差:', np.var(arr,axis=1))
# 最小值:
print(np.min(arr)) #max 最大值
print(np.argmin(arr)) #返回最小值索引
# 累计和:
print(np.cumsum(arr))
#累计积
print(np.cumprod(arr))