Python深度学习入门之numpy基础使用(创建数组、索引、类型转换、维度变换)

Python自带的numpy是深度学习最常用的库之一,作为深度学习入门,只需要掌握创建数组、索引、类型转换、维度变换即可,其他在深度学习中不是很常用,等要用到的时候看看函数API就行。

1.创建数组

1.1 使用 ones,empty, zeros生成数组,形参shape=[2,3]为2行3列的维度

#in:   
np.ones(shape=[2,3]) #[2,3]为2行3列的维度
#out:  
array([[1., 1., 1.],
       [1., 1., 1.]])
#in:
np.zeros(shape=[3,4])
#out:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
#in:
np.empty(shape=[4,5]) #随机生成
#out:
array([[2.47053687e-316, 6.27463370e-322, 0.00000000e+000,
        0.00000000e+000, 1.78019625e-306],
       [5.30276956e+180, 3.31033942e-033, 4.57487963e-071,
        3.25824571e-086, 3.35560119e-143],
       [6.01433264e+175, 6.93885958e+218, 5.56218858e+180,
        3.94356143e+180, 7.18978022e-067],
       [2.90327285e-057, 2.08799593e-076, 6.82201766e-067,
        7.49078798e-144, 1.50008929e+248]])

1.2 使用linspace,arange生成数组(注意区间闭合)

#in:
np.linspace(0,99,10) #左闭右闭,等距生成数组,前两个数为区间,第三个数是步长
#out:
array([ 0., 11., 22., 33., 44., 55., 66., 77., 88., 99.])
#in:
np.arange(0,99,33) #左闭右开,第三个数是步长
#out:
array([ 0, 33, 66])
#in:
np.random.normal(0, 1, size=(8,10)) #在(0,1)区间随机生成维度为[8,10]的数组
#out:
array([[ 0.4889333 ,  0.52598919, -1.1787282 ,  0.92947144, -0.61411273,
        -0.40308503, -0.24170964, -1.65005546, -1.10860983, -1.17195597],
       [ 2.30153196,  0.08231435, -0.42151829,  0.23084481, -0.22912885,
         0.35418584,  0.18042856,  0.50218664, -0.06535679, -1.08141255],
       [ 0.78668497,  0.40467269, -2.15751968, -0.5284904 ,  0.61413254,
         0.38134191, -0.32608761, -0.80535812, -0.28665986, -0.46265705],
       [ 0.40831628,  1.1195378 , -0.19555259, -1.26725678,  0.06050092,
        -1.53074358, -0.46109896,  1.0585371 , -1.68785747, -0.38269948],
       [ 0.2533123 ,  0.7493127 , -0.39330055,  0.59872789,  1.23311894,
         1.56123508,  0.88216884, -0.11006012,  1.67101912,  0.36773784],
       [-0.01196778, -0.29989697, -0.10620468,  0.62047068, -0.35919101,
         0.14259044, -0.77929073,  1.07955841, -0.57254166, -0.75650875],
       [-0.38727358,  0.34665637,  0.28927818,  0.23179733,  0.22165409,
         0.3740697 , -0.03544985,  0.34657169, -0.21841557,  1.18743025],
       [-0.88678905, -1.13712659,  0.38860167, -0.43039802, -0.23007068,
         1.49646142, -0.60181792,  2.09735673, -1.08618737, -1.09159316]])

1.3 生成服从某种函数分布的数组

均匀分布

#in:
np.random.uniform(-1,1,100000) #均匀分布,前两个数是区间,第三个数是个数
#out:
array([ 0.15119225,  0.40014323, -0.05461068, ..., -0.98073734,
        0.75843808,  0.4539914 ])

正态分布

#in:
np.random.normal(1.8, 0.1, 100000) #参数分别是 对称轴,标准差,个数
#out:
array([1.64399767, 1.59405144, 1.92386876, ..., 1.85188776, 1.72408358,
       1.82817792])

2 索引

1.1 一维数组
一维数组基本索引与Python列表(list)类似,如arr[0]
访问一维数组的第一个元素,arr[1:3]访问数组第1、2个元素

1.2 二维数组
二维数组列表与列表同样类似,需要两个索引号,并用逗号隔开。如:
arr[0][1]: 访问数组第一行第二个元素;
arr[0]:访问数组第一行所有元素,同arr[0, :];
arr[:, 1]: 访问所有行第2列的元素;
arr[0:4, 2:5]: 访问第1、2、3行,第3、4、5列的元素;
(注:0可以省略不写,索引号1代表第2行,多维数组以此类推)

3 类型转换

深度学习中,经常要对列表list、数组array、张量Tensor类型数据进行相互转换,以下是常用的转换函数:

3.1 numpy、Tensor互转

import numpy as np
import tensorflow as tf
import torch
arr = np.empty([3,4])
tf_arr = tf.convert_to_tensor(arr) #numpy转TensorFlow
arr = tf_arr.eval() #Tensorflow转numpy
torch_arr = torch.from_numpy(arr) #numpy转torch
arr = torch_arr.numpy() #torch转numpy
#注:tf2.0之后的版本,也支持tf.numpy()将Tensor转为numpy

3.2 numpy、list互转

list1 = [[1, 2], [3, 4], [5, 6]]
arr = np.array(list1) #list转numpy
list1 = arr.tolist() #numpy转list

4 维度变换

常用的维度变换函数为reshape、resize(无返回值)、flatten、ravel(无返回值)

#维度变换
data6 = np.random.normal(0, 1, size=(8,10)) #创建维度为(8,10)的随机数组
data6.reshape((10,8)) #有返回值,按原来的顺序重新分组,要求总数一致,维度变为(10,8),此时data6未改变
data6.resize((10,8)) #无返回值,会直接改变原数组data6
#拉平变换
data6 = np.random.normal(0, 1, size=(8,10)) #创建维度为(8,10)的随机数组
data6.flatten() #有返回值,按原来的顺序重新分组,要求总数一致,维度变为(n),此时data6未改变
data7 = data6.flatten() #不会报错,标准使用方法
data6.ravel() #无返回值,会直接改变原数组data6,data6被拉平
data7 = data6.ravel() #报错,因为ravel()函数无返回值
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值