pytorch机器学习之numpy基础
程序员文章站
2023-12-27 18:49:03
...
一.基本概念
维度叫做轴(axes),轴的个数叫做秩(rank)
1.ndarray.ndim:数组轴的个数
2.ndarray.shape(n,m):数组的维度,n排m列
3.ndarray.size:数组元素的总个数
4.ndarray.dtype:描述数组中元素类型的对象
5.ndarray.itemsize:数组中每个元素的字节大小
a=np.arange(10).reshape(2,5)
print(a)
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
二.创建数组
1.函数zeros创建一个全是0的数组
2.函数ones创建一个全是1的数组
3.函数empty创建一个内容随机并且依赖于内存状态的数组
4.用linspace来接收我们想要的元素个数来替代用range来指定步长
a=np.array([2,3,4])
print(a)
b=np.array([[[1,2],[2,3]]])#嵌套的形式展示维度
print(b)
print(b.ndim)
函数zeros创建一个全是0的数组
print(np.zeros((3,4)))
函数ones创建一个全是1的数组
print(np.ones((2,3,4)))
函数empty创建一个内容随机并且依赖于内存状态的数组
print(np.empty((2,3)))
用linspace来接收我们想要的元素个数来替代用range来指定步长
print(np.arange(10,30,5))
print(np.arange(0,2,0.3))
from numpy import pi
print(np.linspace(0,2,9))#从0到2的9个数
x=np.linspace(0,2*pi,100)#在有多个小数位时使用
print(np.sin(x))
三.基本运算
a=np.array([20,30,40,50])
b=np.arange(4)
print(a-b)
print(b**2)
print(10*np.sin(a))
print(a<35)
操作符
print(a.dot(b))#矩阵乘法然后相加的结果
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
print(A*B)
print(A.dot(B))#矩阵乘法可以使用dot函数或者创建新的矩阵对象方式实现
print(np.dot(A,B))
统计类运算
a=np.arange(12).reshape(3,4)
print(a)
print(a.sum(axis=0))#维度为0时的总和
print(a.min(axis=1))#维度为1时最小的值
print(a.cumsum(axis=1))#维度为1时求和(该数于前面所有的数的和)
四.索引,切片,迭代
**索引(一维)**
a=np.arange(10)**3
print(a)
print(a[2])
print(a[2:5])
a[:6:2]=-1000#从第一个元素开始每隔一个元素将其复制为-1000
print(a)
print(a[::-1])#反转
**索引(二维)**
b=np.arange(20).reshape(5,4)
print(b)
print(b[2,3])
print(b[1:3,:]) #第2到第3行
print(b[-1])#最后一行
print(b[...,2])#第3列的所有数
a=np.arange(12)**2
i=np.array([1,1,3,4,5])
print(a[i])
j=np.array([[3,4],[2,5]])
print(a[j])
**数组索引**
a=np.arange(12).reshape(3,4)
# print(a)
i=np.array([[0,1],[1,2]])
j=np.array([[2,1],[3,3]])
print(a[i,j])#(0,2)(1,1)(1,3)(2,3)
print(a[:,j])
**布尔数组索引**
a=np.arange(12).reshape(3,4)
print(a)
print(a>4)
b=a>4
print(a[b])
**迭代**
b=np.arange(12).reshape(3,4)
for row in b:
print(row)
for element in b.flat:#flat属性是数组元素的一个迭代器
print(element)
五.数组赋值
a=np.arange(5)
a[[1,3,4]]=0
print(a)
a=np.arange(12).reshape(3,4)
b=a>4
print(b)
print(a[b])
a[b]=0
print(a)
六.更改数组的形状
1.ravel函数(将数组展开成扁平化的形式)
2.reshape函数(要求指定新的轴的大小)
3.resize函数(重新改变行列,但是不会生成一个新的数组)
a=np.floor(10*np.random.random((3,4)))
print(a)
a.resize(2,6)
print(a)
print(a.T)#行和列互换
print(a.shape)
print(a.ravel())
print(a.reshape(6,2))
七.组合拆分数组
1.vstack函数:使多个ndarray数组沿着第一个轴组合
2.hstack函数:沿着第二个轴组合
3.colunm_stack函数:按对位组合成一个新的二维数组
4.vsplit函数:将ndarray数组沿着纵向的轴分割
5.hsplit函数:将数组沿着水平轴分割,允许指定返回相同形状数组的个数,或者指定在哪些列后分割
6.split函数
vstack函数:使多个ndarray数组沿着第一个轴组合
hstack函数:沿着第二个轴组合
a=np.floor(10*np.random.random((2,2)))
b=np.floor(10*np.random.random((2,2)))
print(a)
print(b)
print(np.vstack((a,b)))#沿第一个轴
print(np.hstack((a,b)))#沿第二个轴
函数colunm_stack:按对位组合成一个新的二维数组
a=np.array((1,2,3))
b=np.array((2,3,4))
print(np.column_stack((a,b)))#按对位组合成一个新的二维数组
vsplit函数:将ndarray数组沿着纵向的轴分割
a=np.floor(10*np.random.random((2,12)))
print(a)
print(np.hsplit(a,3))
print(np.hsplit(a,(3,4)))#按列分成(0-3,3,4-12)
hsplit函数:将数组沿着水平轴分割,允许指定返回相同形状数组的个数,或者指定在哪些列后分割
x=np.arange(16.0).reshape(4,4)
print(x)
print(np.vsplit(x,2))
print(np.vsplit(x,([3,6])))
split函数
x=np.arange(9.0)
print(x)
print(np.split(x,3))
print(np.split(x,[3,4,5]))
八.广播(broadcasting)
1.原则:有意义地处理不具有相同形状的输入
(1). 第一原则:如果所有的输入数组维度不都相同,数值’1’将被重复地添加在维度较小的数组上,直至所有的数组拥有一样的维度
(2).第二原则:确地长度为1的数组沿着特殊的方向向最大形状伸展。对数组来说,沿着那个维度的数组元素的值应该相同
x=np.arange(4)
xx=x.reshape(4,1)
print(xx)
y=np.ones(5)
z=np.ones((3,4))
print(xx.shape)
print(y.shape)
print((xx+y).shape)
print(xx+y)
print(x+z)
交叉运算
newaxis实际上是向a增加了一个轴
a=np.array([0.0,10.0,20.0,30.0])
b=np.array([1,2,3])
print(a[:,np.newaxis]+b)