day3-Tensorflow2.0-Numpy科学计算库

多维数组

  • 数组的形状(Shape):用一个元组来表示,它描述了数组的维度和长度(n0,n1,…,ni,…nm)
  • 长度(Length):某个维度的元素个数

创建numpy数组
numpy:

  • 提供了多维数组、矩阵的常用操作和一些高效的科学计算函数
  • 底层运算通过C语言实现,处理速度快、效率高,适用于大规模多维数组
  • 可以直接完成数组和矩阵运算,无需循环

创建数组:

  • array([列表]/(元组))
>>>import numpy as np

# 创建数组
>>>a=np.array([0,1,2,3])

# 直接输出可以看到数组的定义
>>>a
# array([0,1,2,3])

# 使用print函数可以看到数组中的元素
>>>print(a)
# [1,2,3,4]

# 使用type函数可以得到a的类型
>>>type(a)
# <class 'numpy.ndarray'>

# 可以使用索引访问numpy数组中的元素
>>>a[0]
#0

# 可以使用print输出指定元素
>>>print(a[1],a[2])
# 1 2

# 和列表类似也可以使用切片访问数组中的一部分
>>>a[0:3]
# array([0,1,2])
>>>a[:3]
# array([0,1,2])
>>>a[0:]
# array([0,1,2,3])

数组的性质:

属性 描述
ndim 数组的维数
shape 数组的形状
size 数组元素的总个数
dtype 数组中元素的数据类型
itemsize 数组中每个元素的字节数
>>>a=np.array([0,1,2,3])

>>>a.ndim
1

>>>a.shape
(4,)

>>>a.size
4

Numpy要求数组中所有元素的数据类型必须是一致的

数组元素的数据类型:array([列表]/(元组), dtype=数据类型)
在使用Python列表或元组、创建Numpy数组时,所创建的数组类型,由原来的元素类型推导而来

创建特殊的数组:

函数 功能描述
np.arange(起始数字, 结束数字, 步长, dtype=数据类型) 前闭后开:数字序列不包括结束数字;起始数字省略时,默认从0开始;步长省略时,默认为1 创建数字序列数组
np.ones(shape, dtype=数据类型) 创建全1数组
np.zeros(shape, dtype=数据类型) 创建全0数组
np.eye(shape) 创建单位矩阵
np.linspace(start, stop, num=元素个数) 非前闭后开,包括终止数字 创建等差数列
np.logspace(start, stop, num=元素个数, base=基数) 创建等比数列

asarray()函数:将列表或元组转化为数组对象
当数据源本身已经是一个数组对象时,array会复制出一个副本占用新的内存

import numpy as np
list1=[[1,1,1],[1,1,1],[1,1,1]]
arr1=np.array(list1)
arr2=np.asarray(list1)

list1[0][0]=3

print(list1)
# [[3, 1, 1], [1, 1, 1], [1, 1, 1]]

print(arr1)
"""
[[1 1 1]
 [1 1 1]
 [1 1 1]]
"""

print(arr2)
"""
[[1 1 1]
 [1 1 1]
 [1 1 1]]
"""

当数据源本身已经是一个ndarray对象时,array仍然会复制出一个副本占用新的内存,而asarray则直接引用了原来的数组;


数组运算
二维数组元素的切片:

import numpy as np
b = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
"""
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
"""

# 取某一行
b[1]   # array([4, 5, 6, 7])

# 取某一列
b[:,2]  # array([ 2,  6, 10])
##### 取列注意:虽然操作是二维的,但是操作的结果是一维的

# 取某一个元素
b[1,2]  # 6

# 取二维数组中的另一部分数组
b[:2,:2]  #等同于b[0:2,0:2] 
"""
array([[0, 1],
       [4, 5]])
"""

三维数组切片

数组相加:

  • 相加数组的形状和长度应该一致
  • 一维数组可以和多维数组相加,相加时会将一维数组扩展至多维数组
  • 数组间的减法、乘法、除法运算,和加法运算规则相同
  • 当两个数组中元素的数据类型不同时,精度低的数据类型会自动转换为精度高的数据类型,然后再进行计算
  • 幂运算:对数组中每个元素求次方

矩阵运算:

  • 矩阵乘法:乘法运算符——矩阵中对应的元素分别相乘;要得到矩阵乘积的结果——matmul函数或者dot函数
  • 矩阵转置:np.transpose()
  • 矩阵求逆:np.linalg.inv()

数组元素之间的运算:
常用的

函数 功能描述
np.sum() 计算所有元素的和
np.prod() 计算所有元素的乘积
np.diff() 计算数组的相邻元素之间的差
np.sqrt() 计算各元素的平方根
np.exp() 计算各元素的指数值
np.abs() 取各元素的绝对值

要理解参数 轴(axis)——以三维数组为例:

t=np.arange(24).reshape(2,3,4)
# 形状是(2,3,4),轴有3个

"""
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],


       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
"""

np.sum(t)
# Out[1]: 276

# 轴为0时,对第一个维度中的元素求和,第一个维度上有两个元素,都是二维数组,因此,就是将这两个二维数组上的元素对应相加,得到一个新的二维数组
np.sum(t,axis=0)
"""
array([[12, 14, 16, 18],
       [20, 22, 24, 26],
       [28, 30, 32, 34]])
"""

# 轴为1时,是将这个轴上的三个分量相加,结果中消除了这个分量,得到2*4的数组
np.sum(t,axis=1)
"""
array([[12, 15, 18, 21],
       [48, 51, 54, 57]])
"""

np.sum(t,axis=2)
"""
array([[ 6, 22, 38],
       [54, 70, 86]])
"""

数组的堆叠:np.stack()
np.stack((数组1, 数组2, ...), axis)
分析与验证:尝试分析数组m,n分别按照axis=0,1,2堆叠后的结果数组。


矩阵和随机数
矩阵——numpy.matrix
matrix(字符串/列表/元组/数组)
mat(字符串/列表/元组/数组)

矩阵运算——矩阵相乘

  • * 符号

矩阵运算——转置、求逆

  • 转置:.T
  • 求逆:.I
矩阵 数组
符号运算简单 能够表示高维数组
A*B 数组更加灵活,速度更快

随机数模块——numpy.random

函数 功能描述 返回值
np.random.rand(d0,d1,...dn) 元素在[0, 1)区间均匀分布的数组 浮点数
np.random.uniform(low,high,size) 元素在[low, high)区间均匀分布的数组 浮点数
np.random.randint 元素在[low, high)区间均匀分布的数组 整数
np.random.randn 产生标准正太分布的数组 浮点数
np.random.normal(loc, scale, size) 产生正态分布的数组 浮点数

伪随机数:由随机种子,根据一定的算法生成的。
随机种子:指定随机数生成时所用算法开始的整数值。

  • 如果使用相同的seed()值,则每次生成的随机数都相同。
  • 如果不设置这个值,则系统根据实际来自己选择这个值,此时每次生成的随机数因时间差异而不同
  • 采用seed()函数设置随机种子,仅一次有效
  • 随机数产生的算法,和系统有关

打乱顺序函数:np.randomo.shuffle(序列)

发布了80 篇原创文章 · 获赞 6 · 访问量 7647

猜你喜欢

转载自blog.csdn.net/qq_33749437/article/details/104374847