文章目录
numpy是python的基础,与tensorflow关系密切。在使用numpy之前需要到导入numpy 模块:
import numpy as np
1. 生成ndarray的集中方式
1.1从已有的数据中创建
import numpy as np
list1=[1,2,3,4]
#<class 'list'>
print(type(list1))
nd1=np.array(list1)
#[1 2 3 4],<class 'numpy.ndarray'>
print(nd1)
print(type(nd1))
第一个print(type())输出是list类型,第二个是numpy.ndarray类型
1.2利用random模块生成ndarray
下面介绍几个常用的函数:
1.random():生成0-1的随机数;
2.uniform():生成均匀分布的随机数;
3.randn():标准正态分布函数;
4.seed():设置随机数种子;(当想产生相同数时,只需seed数一样即可)
下面展示实例:
import numpy as np
#生成3*3的介于0-1矩阵,
nd=np.random.random([3,3])
print(nd)
import numpy as np
#设置随机种子数为123,
np.random.seed(123)
nd=np.random.randn(2,3)
print(nd)
#打乱nd
np.random.shuffle(nd)
print(nd)
输出为:[[-1.0856306 0.99734545 0.2829785 ]
[-1.50629471 -0.57860025 1.65143654]]
[[-1.50629471 -0.57860025 1.65143654]
[-1.0856306 0.99734545 0.2829785 ]]
1.3创建特定形状的多维数组
import numpy as np
#创建全是1的3**3矩阵
nd1=np.ones([3,3])
#创建全是0的3*3矩阵
nd2=np.zeros([3,3])
#创建3阶单位矩阵
nd3=np.eye(3)
1.4利用arange函数
import numpy as np
nd1=np.arange(25).reshape(5,5)
print(nd1)
输出:[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
注意:利用np.arange(n).reshape(x,y)时,创建的矩阵大小应全包含n,不能大于或者小于n。即:n=x*y;
2.存取元素
下面介绍几个读取元素例子:
import numpy as np
np.random.seed(123)
nd1=np.random.random([10])
#输出第三个数
print(nd1[3])
#输出1-3
print(nd1[1:3])
#输出1-6,其中步长为2
print(nd1[1:6:2])
#倒序输出,步长为2
print(nd1[::-2])
nd2=np.arange(25).reshape(5,5)
#输出1-2行和1-2列
print(nd2[1:3,1:3])
#输出nd2中大于5,小于10的数
print(nd2[(nd2>5)&(nd2<10)])
以上是通过指定索引标签,还有一些其他的方法,例如random.choice()
import numpy as np
from numpy import random as nr
np.random.seed(123)
nd1=np.arange(1,25,dtype=float)
#从nd1从随机抽取一个3*4的矩阵,可重复
c1=nr.choice(nd1,size=(3,4))
#不可重复
c2=nr.choice(nd1,size=(3,4),replace=False)
print(c1)
3.矩阵操作
import numpy as np
nd1=np.arange(9).reshape(3,3)
#求矩阵转置
print(np.transpose(nd1))
a=np.arange(12).reshape(3,4)
b=np.arange(8).reshape(4,2)
#矩阵相乘
print(a.dot(b))
#矩阵的a的迹
print(a.trace())
c=np.random.random([3,3])
#求c的逆
print(np.linalg.solve(c,np.eye(3)))
以上为求矩阵的转置,两个矩阵相乘,求矩阵的迹和逆,numpy.linalg模块中还有一些其他的函数:
- diag:以一维数组方式返回方阵的对角线元素
- dot:矩阵乘法
- inv:计算方阵的逆
- qr:计算qr分解
- lstsq:计算Ax=b的最小二乘法
4.数据合并与展平
4.1 合并一维数组
利用np.append()函数实现两个数组合并
import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
c=np.append(a,b)
print(c)
输出:[1 2 3 4 5 6]
4.2 多维数组合并
np.append(a,b,axis),其中axis=0,按列合并,axis=1,按行排列
import numpy as np
a=np.arange(4).reshape(2,2)
b=np.arange(4).reshape(2,2)
#按列合并
c=np.append(a,b,axis=0)
print(c)
#按行合并
d=np.append(a,b,axis=1)
print(d)
输出:[[0 1]
[2 3]
[0 1]
[2 3]]
[[0 1 0 1]
[2 3 2 3]]
4.3矩阵展平
使用ravel()函数,ravel(‘F’)按列展开,ravel()按行展开
import numpy as np
#reshape(2,-1),其中-1表示自动填充,生成一个2维的矩阵
a=np.arange(6).reshape(2,-1)
print(a)
print(a.ravel('F'))
print(a.ravel())
输出:[[0 1 2]
[3 4 5]]
[0 3 1 4 2 5]
[0 1 2 3 4 5]
5.广播机制
广播机制的功能是为了方便不同shape的数组进行数学运算
import numpy as np
a=np.arange(10)
b=np.arange(10)
print(a+b)
print(a+3)
print(a*b)
c=np.arange(10).reshape(5,2)
d=np.arange(2).reshape(1,2)
print(c+d)
输出:[ 0 2 4 6 8 10 12 14 16 18]
[ 3 4 5 6 7 8 9 10 11 12]
[ 0 1 4 9 16 25 36 49 64 81]
[[ 0 2]
[ 2 4]
[ 4 6]
[ 6 8]
[ 8 10]]
a+b,ab,a+3是将对应位置相加/乘,也可以与一个常数相加。
c,d是不同维的数组,先将数组d复制扩充为52的矩阵,每一行都是[0,1],然后再与c对应元素相加。
以上为numpy的基础知识,以上内容为学习时所做总结,只供学习使用。