基本概念
- ndarray
数组(矩阵),numpy中最基本的数据结构:
对于ndarray结构来说,里面所有的元素必须是同一类型的如果不是的话,会自动的向下进行转换(int->float, int->string)
tang_list = [1,2,3,4,5.1,'tt']
tang_array = np.array(tang_list)
tang_array
**array(['1', '2', '3', '4', '5.1', 'tt'], dtype='<U32')**
#1,是np.ones((3,3))
np.zeros((3,3))
**array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])**
#拷贝矩阵的形状
tang_array = np.array([1,2,3,4])
np.zeros_like(tang_array)
**array([0, 0, 0, 0])**
列表转换数组:
array1 = np.array([1,2,3,4,5])
array1.shape
**(5,)**
array2 = np.array([[1,2,3],[4,5,6]])
array2.shape
**(2, 3)**
array2 = np.array([[[1,2,3],[4,5,6]]])
array2.shape
**(1, 2, 3)**
基本操作
tang_array = np.arange(0,100,10)
tang_array
**array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])**
mask = np.array([0,0,0,0,0,0,1,1,1,1],dtype=bool)
mask
**array([False, False, False, False, False, False, True, True, True, True])**
tang_array[mask]
**array([60, 70, 80, 90])**
mask = random_array > 0.5
mask
**array([False, True, False, True, True, True, True, True, True, True])**
tang_array[mask]
**array([ 0, 10, 30, 40, 50, 60, 80, 90])**
tang_array = np.array([10,20,30,40,50])
tang_array > 30
**array([False, False, False, True, True], dtype=bool)**
np.where(tang_array > 30)
**(array([4, 5, 6, 7, 8, 9], dtype=int64),)**
tang_array[np.where(tang_array > 30)]
**array([40, 50])**
tang_array = np.array([1,2,3,4,5])
tang_array.astype(np.float32)
**array([ 1., 2., 3., 4., 5.], dtype=float32)**
数组拷贝与连接
1、改变tang_array2中的值,tang_array也会改变
2、改变tang_array2中的值,tang_array不会受影响
1、tang_array2 = tang_array
2、tang_array2 = tang_array.copy()
a = np.array([[123,456,678],[3214,456,134]])
b = np.array([[1235,3124,432],[43,13,134]])
#样本拼接=np.vstack((a,b))
c = np.concatenate((a,b),axis = 0)
**array([[ 123, 456, 678],
[3214, 456, 134],
[1235, 3124, 432],
[ 43, 13, 134]])**
#特征拼接=np.hstack((a,b))
c = np.concatenate((a,b),axis = 1)
**array([[ 123, 456, 678, 1235, 3124, 432],
[3214, 456, 134, 43, 13, 134]])**
a.flatten()
array([ 123, 456, 678, 3214, 456, 134])
array数组的数值计算
tang_array = np.array([[1,2,3],[4,5,6]])
np.sum(tang_array)
**21**
#数组有多少维,axis就有多少取值可能,如图片,axis=2
#列计算
np.sum(tang_array,axis=0)
**array([5, 7, 9])**
#行计算
np.sum(tang_array,axis=1)
**array([ 6, 15])**
#取最小值,最大值max
tang_array.min(axis = 0)
array([1, 2, 3])
tang_array.min(axis = 1)
array([1, 4])
#找到索引的位置
tang_array.argmin(axis = 0)
**array([0, 0, 0], dtype=int64)**
tang_array.argmin(axis=1)
**array([0, 0], dtype=int64)**
#求平均值
tang_array.mean(axis = 0)
array([ 2.5, 3.5, 4.5])
#求标准差,方差var
tang_array.std(axis = 0)
**array([1.5, 1.5, 1.5])**
#四舍五入
tang_array = np.array([1.2,3.56,6.41])
tang_array.round()
**array([1., 4., 6.])**
tang_array.round(decimals=1)
**array([ 1.2, 3.6, 6.4])**
排序
tang_array = np.array([[1.5,1.3,7.5],
[5.6,7.8,1.2]])
#升序
np.sort(tang_array,axis = 0)
**array([[ 1.5, 1.3, 1.2],
[ 5.6, 7.8, 7.5]])**
排序找索引
np.argsort(tang_array, axis=0)
**array([[0, 0, 1],
[1, 1, 0]], dtype=int64)**
#第一列降序排列
index = np.lexsort([-1*tang_array[:,0]])
#升序
index = np.lexsort([tang_array[:,0]])
矩阵运算
x = np.array([5,5])
y = np.array([2,2])
x.shape = 2,1
y.shape = 1,2
np.dot(x,y)
**array([[10, 10],
[10, 10]])**
np.dot(y,x)
**array([[20]])**
随机模块
#所有的值都是从0到1
np.random.rand(3,2)
**array([[ 0.87876027, 0.98090867],
[ 0.07482644, 0.08780685],
[ 0.6974858 , 0.35695858]])**
#5行4列,10以内
np.random.randint(10,size = (5,4))
#生成高斯分布,mu=均值,sigma=方差
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
**array([ 0.05754667, -0.07006152, 0.06810326, -0.11012173, 0.10064039,
-0.06935203, 0.14194363, 0.07428931, -0.07412772, 0.12112031])**
#保留两位有效数字
np.set_printoptions(precision = 2)
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
#洗牌
tang_array = np.arange(10)
np.random.shuffle(tang_array)
#设置随机种子,每次随机结果一直
np.random.seed(100)
读写模块,主要用于保存建模过程的中间数据
tang_array = np.array([[1,2,3],[4,5,6]])
np.save('tang_array.npy',tang_array)
tang = np.load('tang_array.npy')
tang
**array([[1, 2, 3],
[4, 5, 6]])**