Numpy学习笔记

基本概念

  • 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]])**
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值