深度学习入门numpy的基本使用方法——数组

Python自带的numpy是深度学习最常用的库之一,作为深度学习入门,只需要掌握创建数组、索引、类型转换、维度变换即可。本文主要讲解数组。

1.1 数组的维度与形状

在NumPy中,数组是使用np.array函数创建的,可以从列表或其他序列类型转换而来。数组可以是任意维度的,这由输入数据的形状决定。np.array是NumPy库中用于创建数组的函数。NumPy数组(或ndarray)是NumPy的核心特性之一,提供了高效的多维数组操作,支持数学和逻辑运算、形状操作、排序、选择、I/O操作、离散傅里叶变换、基本线性代数、基本统计操作以及随机模拟等。在科学计算和数据分析中,NumPy数组由于其速度和灵活性而被广泛使用。

要使用np.array创建数组,你需要导入NumPy库,并将一个列表(或者嵌套列表)作为参数传递给np.array。这可以创建出各种维度的数组:

import numpy as np

# 创建一维数组
arr1d = np.array([1, 2, 3])

# 创建二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])

# 创建三维数组
arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

x = np.array([[1, 2, 3]])创建了一个NumPy数组,由于数据被包含在两层方括号[[ ]]内,这表明它是一个二维数组。

对于x = np.array([[1, 2, 3]])一个二维数组,其形状的计算基于方括号的嵌套层级以及每个层级内元素的数量。让我们一步一步来分析它的形状:

1. 最外层的方括号定义了数组的最外层,表示这是一个数组。因为这个数组内部还有另一层方括号,所以这是一个二维数组。

2. 内层的方括号[1, 2, 3]表示数组的第一个(也是唯一一个)"行"。这个行内有三个元素。

计算形状:

第一个维度(行数):由最外层方括号内的元素数量决定。这个例子中只有一个元素 `[1, 2, 3]`,所以第一个维度的大小是 `1`。

第二个维度(列数):由内层方括号内的元素数量决定。由于内层方括号 `[1, 2, 3]` 包含三个元素,所以第二个维度的大小是 `3`。

因此,数组 `x` 的形状是 `(1, 3)`,表示一个二维数组,其中有 1 行和 3 列。

使用 `.shape` 验证    : 在Python中,可以直接使用NumPy数组的 `.shape` 属性来获取数组的形状,无需手动计算:

print(x.shape)

这将输出 `(1, 3)`,证明 `x` 是一个形状为 `(1, 3)` 的二维数组。


1.2 使用 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.3 使用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.4 生成服从某种函数分布的数组(均匀分布,正态分布)

#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])

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值