各种库的基本语法

各种库的基本语法

numpy库

具体可见飞桨的numpu库介绍

有数组array,和python的序列一样,有切片和索引,但是不一样的是,array所有操作都是在原数组上进行的,即原数组会被改变

  • 广播功能
    • 一方面可以扩展参数的维度,代替for循环来计算1个样本对从w0到w12的所有参数的梯度
    • 另一方面可以扩展样本的维度,代替for循环来计算样本0到样本403对参数的梯度
  • 一.创建数组
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import numpy as np #起别名np
    a = np.array([1,3,4])
    print(a)
    b = np.array(range(1,10,3))
    c = np.arange(1,10,3) #arragea(array)+range 与上面的range作用和用法一样
    print(c)
    print(c.dtype) #dtype 即二进制类型 包括int32,int64,float64,bool.......

    #修改已有数组的二进制类型
    d = c.astype("float64")
    print(d)
    print(d.dtype)
    print('*'*100)
    #创建数组时指定二进制数据类型
    e = np.array([0,1,2,4],dtype="float64")
    print(e)
    f = np.array([0,1,2,4],dtype="bool")
    print(f)

  • 二.数组的形状np.shape
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #一.查看数组形状g.shape
    g = np.array([0,1,2,3,4,5])
    print(g.shape) #(6,)
    h = np.array([[0,1,2],[3,4,5]])
    print(h.shape) #(2, 3)
    print(h.shape[0]) #2
    print(h.shape[1]) #3
    ##笔记
    ## 1.故g.shape的结果有几个数,g数组就有几维。其中若只有一个数字,则该数字也表示数组中元素的个数
    ## 2.若只有一行,即只有一维,h.shape[0]表示总个数
    ## 3.若有两维则h.shape[0]表示行数,h.shape[1]表示列数。也可以有三维...
    注意:(0 行数,1 列数)axis轴,axis=0就是行数的轴,即竖直方向|.axis=1就是列数的轴,即水平方向——
    a[:,np.newaxis] 表示使a序列上升一个维度,例如一维升二维

    #二.修改数组形状h.reshape() ,也可以是h.reshape([])
    h.reshape(6,) #array([0, 1, 2, 3, 4, 5])
    print(h) #[[0 1 2]
    # [3 4 5]]
    h = h.reshape(6,)
    print(h) #[0 1 2 3 4 5]
    ##笔记
    ## 1.h.reshape()是不改变原数组的形状,只是返回一个改变形状的数组,要赋值h = h.reshape(6,)才能使原数组改变形状。--当然行列乘积要等于总数
    ## 2.所以如果想要一个数组快速的在某一个范围内形成二维数组可以在形成数组时就改变它的形状,具体如下

    i = np.array(range(100,150)).reshape(5,10) #[100,150) 五行十列
    print(i)
    '''
    [[100 101 102 103 104 105 106 107 108 109]
    [110 111 112 113 114 115 116 117 118 119]
    [120 121 122 123 124 125 126 127 128 129]
    [130 131 132 133 134 135 136 137 138 139]
    [140 141 142 143 144 145 146 147 148 149]]
    '''

  • 三.array索引与切片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import numpy as np

#索引是从0开始的
a = np.arange(24).reshape(4,6)
# 相当于 a = np.array(range(24)).reshape(4,6)
print(a)
#取行
a[1]

#取连续多行,前闭后开
a[1:3]
a[:3] #表示[03)
a[1:] #表示1到末尾

#取不连续的多汗
a[[0,2,3]]

#通用的行列取法,a[l,r]逗号左边是行,右边是列。冒号指所有

#取列
a[:,0]

#取连续多列
a[:,0:3]

#取不连续的多列
a[:,[0,2,3]]

#取某个值 3行4列的交点
a[3,4]

#取多行多列的交集
a[1:3,2:4]

  • 四 随机数 np.random

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1. 随机创建数组
    a = np.random.rand(3, 3)
    输出如下:得到3*3的数组
    array([[0.27838268, 0.59910705, 0.97848588],
    [0.0785898 , 0.92671863, 0.98556855],
    [0.71094793, 0.56055373, 0.9365632 ]])
    #还有很多,正态分布等等

    2.随机打乱
    3.随机选取元素
    a = np.arange(30)
    b = np.random.choice(a, size=5)
    b # array([23, 3, 29, 16, 20]) 从a中随机选5个数给b

    np.random.randn(x,y) 表示生成x行y列的随机数,生成数在均值为0的左右浮动

  • 五保存和导入文件

    1
    2
    3
    4
    5
    6
    7
    8
    例如
    # 使用np.fromfile从文本文件'housing.data'读入数据
    # 这里要设置参数sep = ' ',表示使用空白字符来分隔数据
    # 空格或者回车都属于空白字符,读入的数据被转化成1维数组
    d = np.fromfile('./work/housing.data', sep = ' ')
    d
    array([6.320e-03, 1.800e+01, 2.310e+00, ..., 3.969e+02, 7.880e+00,
    1.190e+01])
  • 六.数组的计算

1.数组t1与数字a可以进行加减乘除等运算,即t1中的每个数都与a作运算
2.数组t1和t2只要有一个维度相等就可以做运算

  • 七.数学与统计方法函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np

h = np.array([[0,1,2],[3,4,5]])
print(h)
h.mean() #相加后求平均值 =np.mean(h)
h.sum() #求和 =np.sum(h)
h.max() #求最大 =np.max(h)
h.min() #求最小 =np.min(h)

#都可以指定轴axis
h.mean(axis=0)
h.mean(axis=1)
h.sum(axis=0) #array([3, 5, 7]) 即行数 竖直方向求和
h.sum(axis=1) #array([ 3, 12]) 即列数 水平方向求和
h.max(axis=0) #array([3, 4, 5])
h.min(axis=0) #array([0, 1, 2]) 还有其他方法...

np.zero(x,y) #创建一个x行y列的全零数组 后续可用于存数据

  • 八.线性代数相关函数
    1
    2
    3
    # 例如矩阵相乘 32*23 = 33(三行二列*二行三列 = 三行三列)
    x.dot(y) # = np.dot(x,y)

  • 九.可以用于计算激活函数Sigmoid和ReLU….
1
2
3
4
5
6
7
# x1维数组,数组大小是从-10. 到10.的实数,每隔0.1取一个点
x = np.arange(-10, 10, 0.1)
# 计算 Sigmoid函数
s = 1.0 / (1 + np.exp(- x)) # np.exp(x) 用于求ex

# 计算ReLU函数
y = np.clip(x, a_min = 0., a_max = None) #np.clip(x,a_min,a_max,out) 用于限制x的范围在minmax之间,小于min的就赋值为min,大于max的就赋值为max
  • 十.也可以对图片进行一些操作 读入图片——图片的每个像素点就是一个元素,可以使矩阵数组化 图片水平垂直翻转和裁剪(需要配合其他库)

json库

主要的方法是json.loads(),json.dumps()

  • json.loads() 把json字符串格式文件,转换成python类型的数据。 一个解码
  • json.dumps() 把python类型的数据转换成json字符串 一个编码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import json

    data = '''
    [{
    "name": "小明",
    "height": "170",
    "age": "18"
    }, {
    "name": "小红",
    "height": "165",
    "age": "20"
    }]
    '''

    # 打印data类型
    print(type(data))
    # json类型的数据转化为python类型的数据
    new_data = json.loads(data)
    # 获取内容
    name = new_data[0]['name']
    new_name = new_data[0].get('name')
    # 打印转换后data类型
    print(type(new_data))

    print(name)
    print(new_name)


各种库的基本语法
https://driogon.github.io/2024/08/14/各种库的基本语法/
作者
陈言泷
发布于
2024年8月14日
许可协议