Python numpy

  1. numpy ( numerical python ) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
  2. numpy是 Python 的 第三方库。

【 1. 数组的创建 】

1. 创建一维数组

import numpy as np
'''法1'''
n1 = np.arange(5)  #将数值0 1 2 3 4赋值给n1这个一维数组
'''法2'''
n2 = [y for y in range(5)] #创建一个1*5的一维数组

2. 创建多维数组

import numpy as np
'''法1:直接创建多维数组'''
b = np.array([np.arange(6),np.arange(6)]) 
#使用两个arange方法,创建了两个1x6的一维数组,然后使用numpy的array方法,将两个一维数组组合成一个2x6的二维数组。
'''法2:先创建一维数组,再创建多维数组(提高复用性)'''
yiwei=np.arange(6)
duowei=np.array([yiwei]*2) 
#创建2x6的二维数组

【 2. 向量的基本运算 】

Numpy库可以直接进行一些四则运算,快速的处理两个Numpy数组:

1. 向量与向量的运算

① 向量+向量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[1,2,3]])
print(a+b)
print("")
print(np.add(a,b))

运行结果:
在这里插入图片描述

① 向量-向量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[1,2,3]])
print(a-b)
print('')
print( np.subtract(a,b) )

运行结果:
在这里插入图片描述

③ 向量x向量(x乘)

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[1,2,3]])
print(a*b)
print('')
print( np.multiply(a,b) )

运行结果:
在这里插入图片描述

④ 向量·向量(点乘)

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([4,5,6])
print( np.dot(a,b) )

运行结果:
在这里插入图片描述

⑤ 向量÷向量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[1,2,3]])
print(a/b)
print('')
print( np.divide(a,b) )

运行结果:
在这里插入图片描述

2. 向量与标量的运算

① 向量+标量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a+1 )

运行结果:
在这里插入图片描述

② 向量-标量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a-1 )

运行结果:
在这里插入图片描述

③ 向量x标量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a*2 )

运行结果:
在这里插入图片描述

④ 向量÷标量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a/2 )

运行结果:
在这里插入图片描述

⑤ 向量%标量

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a%2 )

运行结果:
在这里插入图片描述

⑥ 矩阵转置

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print( a.T )

运行结果:
在这里插入图片描述

⑦ 矩阵的逆

矩阵可逆的充要条件是矩阵满秩。

import numpy as np
import numpy.linalg as lg
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(lg.inv(a) )

运行结果:
在这里插入图片描述

【 3. 数组的切片、索引 】

1. 切片

一维Numpy数组的切片操作与Python序列的切片一样。

import numpy as np
a = np.arange(9) #创建一维数组,元素值依次为0,1,2,3,4,5,6,7,8
print( a[3:7] )  #切片下标为3~7的元素(不包括下标为7的元素)
print()
print( a[:7:2] ) #切片下标范围从0到7(不包括下标为7的元素),且下标每次递增2
print()
print( a[::-1] ) #用负值下标来反转数组

运行结果:
在这里插入图片描述

2. 索引

import numpy as np
a=np.array([[1,2,3],[4,3,2]])
b = np.arange(5)  #将数值0 1 2 3 4赋值给b这个一维数组
print(b[3])
print( a[1][0] )
print( a[1,:2] ) #逗号,前表示索引行;逗号,后表示切片该行

运行结果:
在这里插入图片描述

【 4. 数组的堆叠 】

1. 改变数组维度

① 改变维度 reshape()

import numpy as np
b = np.arange(24).reshape(2,3,4) #将一维数组按格式2,3,4切分
print(b)

运行结果:
在这里插入图片描述

② 改变维度 shape()

使用元组改变数组维度。

import numpy as np
a  = np.arange(24)
a.shape = (6,4)
print(a)

运行结果:
在这里插入图片描述

③ 返回一维数组视图 ravel()

将多维数组展示为一维数组,ravel()返回的是一个数组的视图。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b=a.ravel()
print("原数组a:\n",a)
print("原数组a改为一维数组b:\n",b)
b[0]=999
print("修改b后的b:\n",b)
print("修改b后的a:\n",a)
 #因为b是a的一种展示方式,虽然他们是不同的对象,但在修改c的时候,a中相应的数也改变了

运行结果:
在这里插入图片描述

④ 返回一维数组 flatten()

功能与ravel()相同,但是flatten()返回的是真实的数组,需要分配新的内存空间。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b=a.flatten()
print("原数组a:\n",a)
print("原数组a改为一维数组b:\n",b)
b[0]=999
print("修改b后的b:\n",b)
print("修改b后的a:\n",a)
#可见a并未改变,是由于b申请了新的内存,a和b互不影响。

运行结果:
在这里插入图片描述

⑤ 转置 transpose()

转置:调换数组的行列值的索引值。

import numpy as np
a = np.arange(4).reshape((2,2)) #生成一个2x2的数组
print("转置前:\n",a)
print("转置后:\n",a.transpose() )

运行结果:
在这里插入图片描述

2. 数组的堆叠

① 水平叠加 hstack((a,b))

import numpy as np
a = np.arange(9).reshape(3,3)
b = a *2
print("数组a:\n",a)
print("数组b:\n",b)
print("数组a、b水平叠加后:\n",np.hstack((a,b)) ) #注意hstack有两层括号

运行结果:
在这里插入图片描述

② 垂直叠加 vstack((a,b))

import numpy as np
a = np.arange(9).reshape(3,3)
b = a *2
print("数组a:\n",a)
print("数组b:\n",b)
print("数组a、b垂直叠加后:\n",np.vstack((a,b)) ) 注意vstack有两层括号

运行结果:
在这里插入图片描述

③ 深度叠加 dstack((a,b))

import numpy as np
a = np.arange(9).reshape(3,3)
b = a *2
print("数组a:\n",a)
print("数组b:\n",b)
print("数组a、b垂直叠加后:\n",np.dstack((a,b)) ) 注意dstack有两层括号

运行结果:
在这里插入图片描述

【 5. 数组的拆分 】

1. 横向拆分 hsplit(m,n)

m为要拆分的数组,n为要拆分成的维度

import numpy as np
a= np.arange(9).reshape(3,3)
print("数组a:\n",a)
print("数组a横向拆分后:\n",np.hsplit(a,3) )

运行结果:
在这里插入图片描述

2. 纵向拆分 vsplit(m,n)

m为要拆分的数组,n为要拆分成的维度

import numpy as np
a= np.arange(9).reshape(3,3)
print("数组a:\n",a)
print("数组a纵向拆分后:\n",np.vsplit(a,3) )

运行结果:
在这里插入图片描述

3. 深度拆分 dsplit(m,n)

m为要拆分的数组,n为要拆分成的维度

import numpy as np
a= np.arange(27).reshape(3,3,3)
print("数组a:\n",a)
print("数组a深度拆分后:\n",np.dsplit(a,3) )

运行结果:

数组a:
 [[[ 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 25 26]]]
数组a深度拆分后:
 [array([[[ 0],
        [ 3],
        [ 6]],

       [[ 9],
        [12],
        [15]],

       [[18],
        [21],
        [24]]]), array([[[ 1],
        [ 4],
        [ 7]],

       [[10],
        [13],
        [16]],

       [[19],
        [22],
        [25]]]), array([[[ 2],
        [ 5],
        [ 8]],

       [[11],
        [14],
        [17]],

       [[20],
        [23],
        [26]]])]

Process finished with exit code 0
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Promethus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值