设为首页 加入收藏

TOP

NumPy对数组的操作:创建、计算、合并等(一)
2019-09-04 01:00:12 】 浏览:160
Tags:NumPy 对数 操作 创建 计算 合并

  1. 简介


  NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab。


  SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。


  Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。


  2. 创建


  创建一维数组


  (1)直接创建:np.array([1, 2, 3, 4, 5, 6])


  (2)从python的list中建立:np.array(list([1, 2, 3, 4, 5, 6]))


  创建常量值的一维数据


  (1)创建以0为常量值:np.zeros(n,dytpe=float/int)


  (2)创建以1为常量值:np.ones(n)


  (3)创建一个空数组:np.empty(4)


  创建一个元素递增的数组


  (1)从0开始增长的递增数组:np.arange(8)


  (2)给定区间,自定义步长:np.arange(0,1,0.2)


  (3)给定区间,自定义个数:np.linspace(-1,1,50)


  创建多维数组:创建单维数组,再添加进多维数组


  # 数组的结构一定是np.array([]) 无论数组中间存放的是多少“层”数据


  # 二维数组相当于存放的是“两层”数组而已


  arr1=np.array(list([1, 2, 3, 4, 5]))


  arr2=np.array([arr1,[1,0,0,1,0]]) # 2*5的两维数组


  arr3=np.array(list([[0,0,1,1,1],[1,1,1,0,0],[2,3,4,5,6]])) # 3*5的两维数组


  arrx=np.array([arr1,list([1, 2, 3, 4, 5],[1,1,1,0,0])]) # 报错


  arry=np.array([list([[ 1,2,3, 7, 11],[2,3,4,5,6]]),[1, 2, 3, 4, 5]]) # 报错


  创建常量值的(n*m)维数据


  (1)创建以0为常量值:np.zeros((n*m),dytpe=float/int)


  (2)创建以1为常量值:np.ones((n*m))


  (3)创建一个空数组:np.empty((n*m))


  创建随机数字的数组


  生成随机数种子:


  (1)np.random.seed()


  (2)np.random.RandomState()


  生成随机数:


  函数  取值  说明


  1  np.random.rand(d0,d1,…,dn)  [0,1)  根据给定维度生成数组,服从均匀分布


  2  np.random.randint(low, high=None, size=None, dtype=’l’)  [0,low)或者[low,high)  根据size生成离散均匀分布的整数值


  3  np.random.randn(d0,d1,…,dn)    根据给定维度生成数组,服从标准正态分布


  4  np.random.random_sample(size=None)  [0,1)  根据给定维度生成随机浮点数


  5  np.random.random(size=None)  [0,1)  根据给定维度生成随机浮点数


  6  np.random.ranf(size=None)  [0,1)  根据给定维度生成随机浮点数


  7  np.random.sample(size=None)  [0,1)  根据给定维度生成随机浮点数


  生成有分布规律的随机数组


  (1)二项分布:np.random.binomial(n, p, size)


  (2)正态分布:np.random.normal(loc, scale, size)


  将csv文件转化成数组或阵列


  使用 np.genfromtxt( ‘csv文件名’,delimiter = ‘文件中的分割符’ )函数将文件转化成数组


  csv_array = np.genfromtxt('sample.csv', delimiter=',')


  print(csv_array)


  3. 数组的变形


  生成数组/矩阵转置的函数,即行列数字交换,使用.T


  a = np.array([[32, 15, 6, 9, 14],


  [12, 10, 5, 23, 1],


  [2, 16, 13, 40, 37]])


  print(a.T)


  -------------------


  # 结果如下


  [[32 12 2]


  [15 10 16]


  [ 6 5 13]


  [ 9 23 40]


  [14 1 37]]


  改变数组的形状:


  (1)arr.resize(n,m) :arr.resize(n,m)函数是原地修改数组,要求:元素的个数必须一致


  a=np.arange(8)


  a.resize(2,4)


  print(a)


  ---------------------------


  [[0 1 2 3]


  [4 5 6 7]]


  (2)arr.reshape(n,m):如果某一个维度的参数为-1,则表示元素总个数会迁就另一个维度来计算


  a=np.arange(8).reshape(-1,1)


  print(a)


  -----------------


  [[0]


  [1]


  [2]


  [3]


  [4]


  [5]


  [6]


  [7]]


  将一维升至二维:np.newaxis


  np.newaxis实际上是直接增加维度的意思,我们一般不会给数组增加太多维度,这里以一维增加到二维为例:


  (1)增加行维度:arr[np.newaxis, :]


  (2)增加列维度:arr[: , np.newaxis]


  a=np.arange(8)


  a # array([0, 1, 2, 3, 4, 5, 6, 7])


  a.shape # (8,)


  a[np.newaxis, :] # array([[0, 1, 2, 3, 4, 5, 6, 7]])


  a.shape # (8,)


  a[: , np.newaxis] # array([[0],[1],[2],[3],[4],[5],[6],[7]])


  a.shape # (8,)


  降维:arr.ravel()


  arr.ravel()函数在降维时:默认是行序优先生成新数组(就是一行行读);如果传入参数“F”则是列序降维生成新数组


  a=np.array([[1,2],[3,4]])


  a.ravel()


  a.ravel('F')


  ----------------------------


  # 结果 array([1, 2, 3, 4])


  # 结果 array([1, 3, 2, 4])


  4. 计算


  对数组进行计算操作


  (1)对元素进行加减计算


  a=np.arange(8).reshape(2,4) # array([[0, 1, 2, 3], [4, 5, 6, 7]])


  b=np.random.randint(8,size=(2,4)) # array([[1, 2, 5, 3], [4, 1, 0, 6]])


  a+b


  a-b


  ----------------------------


  # a+b和a-b结果分别是:


  array([[ 1, 3, 7, 6],


  [ 8, 6, 6, 13]])


  array([[-1, -1, -3, 0],


  [ 0, 4, 6, 1]])


  (2)乘法:平方/矩阵中元素相乘


  a=np.arange(8).reshape(2,4) # array([[0, 1, 2, 3], [4, 5, 6, 7]])


  b=np.random.randint(8,size=(2,4)) # array([[1, 2, 5, 3], [4, 1, 0, 6]])


  a**2


  a*b


  -----------------------


  # a矩阵平方/a*b矩阵中元素相乘结果分别:


  array([[ 0, 1, 4, 9],


  [16, 25, 3

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python3使用PySynth制作音乐 下一篇ZooKeeper异步调用命令

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目