您的位置:首页 > 编程语言 > Python开发

python模块numpy的基本使用实例

2019-02-15 17:09 537 查看
  • 为什么用numpy?

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

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

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

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

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

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

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

[code]#两个以为组合成二维数组
>>>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) 改变数组形状

[code]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()仅改变视图

[code]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重载了运算符+、-、*、/

[code]#矩阵运算
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列
[code]>>> 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))
[code]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为拆分到的维度
[code]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]]])]

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: