python模块numpy的基本使用实例

  • 为什么用numpy?

python中用列表list表示一组值,列表中元素可以是任意类型对象,因此列表中存放的实际上是对象的指针。既要存指针又要存值,因此耗内存和CPU计算时间。

虽然python中还有array类型,里面存放的是值,但它不支持多维,且没有各种运算函数,不适合作数值运算。

numpy是Python的一个科学计算的库,主要提供了矩阵运算功能,可用于大型矩阵的存储和运算。

  • 导入numpy模块:import numpy as np
  • numpy创建数组

1、快速创建一个以为数组:np.arange(n):得到值为0到n-1的n个元素的数组

>>>np.arange(5)
array([0, 1, 2, 3, 4])

2、利用np.array()创建多维数组

#两个以为组合成二维数组
>>>np.array([np.arange(3),np.arange(3)])
array([[0, 1, 2],
       [0, 1, 2]])

#注意
>>>np.array([np.arange(2),np.arange(3)])
array([array([0, 1]), array([0, 1, 2])], dtype=object)

#numpy创建的数组可以直接复制
x = [y for y in range(6)]
b=np.array([x]*4)

ret=np.array([np.arange(6)]*m)

3、通过reshape(2,3) 改变数组形状

import numpy as np
b = np.arange(24).reshape(2,3,4)
>>>b
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]]])

>>>b.shape = (6,4)
>>>b
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]])

4、revel()与flatten()将多维数组合成一维,不同在于:flatten()返回的是真实数组,要重新分配空间,而revel()仅改变视图

import numpy as np
b = np.arange(24).reshape(2,3,4)

>>>b.ravel()
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])

>>>b.flatten()
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])
  •  基本运算

numpy重载了运算符+、-、*、/

#矩阵运算
np.add(a,b) #或 a+b
np.subtract(a,b)# 或 a-b
np.multiply(a,b) #或 a*b(对应乘)
np.dot(a,b) #点乘(矩阵乘法)
np.divide(a,b) #或 a/b(对应除)

#转置
a.transpose()  #或a.T (转置)

#矩阵的逆
import numpy as np
import numpy.linalg as lg
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
ret=lg.inv(a)
  • 切片和索引
  1. s:e 表示选择从下标s到e-1元素
  2. s:e:d 表示选择从下标s到e-1间隔为d的元素
  3. 对于多维,用,分隔各维。如二维:0:3 , 4:5 为选择0行到第3行的第4列
>>> a=np.array([[1,2,3],[4,3,2]])
>>>a[1][0] 
array([4])
>>>a[1,:2]
array([4, 3])
  •  数组堆叠np.hstack((a,b))、vstack((a,b))、dstack((a,b))
a = np.arange(9).reshape(3,3)
b = a*2

# 注意 这里是两层括号
#水平堆叠
np.hstack((a,b))  
>>>array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

#垂直堆叠
>>>np.vstack((a,b))
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

#深度堆叠
>>>np.dstack((a,b))
array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],
       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],
       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])
  •  数组拆分np.hsplit(a,3)、np.vsplit(a,3)、np.dsplit(a,3) #a为数组,3为拆分到的维度
a= np.arange(9).reshape(3,3)
>>>a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

#横向拆分
>>>np.hsplit(a,3)
[array([[0],[3], [6]]), 
    .  array([[1], [4],[7]]), 
       array([[2],[5], [8]])]

#纵向拆分
>>>np.vsplit(a,3)
Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

#深度拆分,深度拆分要求数组的秩大于等于3
c= np.arange(27).reshape(3,3,3)
>>>np.dsplit(c,3)
[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]]])]

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值