首页 > 其他 > 详细

第三十七篇 numpy模块

时间:2019-06-17 20:13:59      阅读:112      评论:0      收藏:0      [点我收藏+]

numpy模块

import numpy as np

numpy模块用于创建数组和数组的运算,是pandas、sklearn等模块的依赖包

列表

l = [1,2,3]
print(l)   # [1, 2, 3]

1.list的内置方法:1.索引 2.切片 3.长度 4.成员 5.for 6.其他内置方法

2.np.array和list的区别

  • list是对一维数组进行操作,numpy对多维数组进行操作

用numpy模块中的numpy.array创建数组

一维数组

1.一维数组只有一行,相当于现实中的一条线

ar = np.array(l)
print(ar)    # [1 2 3]

2.列表推导式

l1 = [i for i in range(1,10,1)]
print(l1)    # [1, 2, 3, 4, 5, 6, 7, 8, 9]

3.numpy中的类似方法np.arange()

ar1 = np.arange(9)
print(ar1)   # [0 1 2 3 4 5 6 7 8]
ar2 = np.arange(0,9,2)
print(ar2)    # [0 2 4 6 8]

二维数组(用到最多)

有行有列,相当于一个面,也可以说是一个列表中装了多个一维

arr1 = np.array([  [1, 2, 3], [4, 5, 6]  ])
print(arr1)
'''
打印结果:
[[1 2 3]
 [4 5 6]]
'''

三维数组(了解)

x,y,z坐标。相当于一个体,也可以说是一个列表中装了多个二维数组

arra1 = np.array([  [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ]  ])
print(arra1)
'''
打印结果:
[[[1 2 3]
  [4 5 6]]

 [[1 2 3]
  [4 5 6]]

 [[1 2 3]
  [4 5 6]]]
'''

数组的运算

1.以二维数组为例,获取多维数组的行和列

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
'''
列一 二 三 四
[[ 1  2  3  4]       第一行
 [ 5  6  7  8]       第二行
 [ 9 10 11 12]]      第三行
'''
print(arr.shape)   # (3, 4),以元组的形式返回3行4列
print(arr.shape[0])   # 3行
print(arr.shape[1])    # 4列

2.多维数组的索引

  • 中括号加索引,行和列用逗号隔开
#一定要记住索引都是从0开始的
print(arr[1, 2])     # 7    第二行第三列的元素
print(arr[0,3::-1])   # [4 3 2 1]   第一行从第四列开始往前取所有元素
print(arr[1, :])      # [5 6 7 8]   第二行所有元素
print(arr[2,1:3])    # [10 11]   第三行从第二列到第三列的元素
print(arr[:, 2])        # [ 3  7 11]    第三列所有元素
print(arr[:2, 3])   # [4 8]   第四列从第一行到第二行的元素(切片顾头不顾尾)

# 可以把通过索引取值或切片方法取出来的元素赋值
arr[0,:] = 1    # 第一行的元素全部赋值为1
print(arr)
'''
[[ 1  1  1  1]
 [ 5  6  7  8]
 [ 9 10 11 12]]
'''

3.高级功能

  • 可以用比较运算符得到多维数组中元素的bool值
print(arr>=10)
'''
打印结果:
[[False False False False]
 [False False False False]
 [False True  True  True]]
'''
# 通过bool值进行数组中数据的过滤
# 把bool值为True的元素通过索引取值的方法取出来进行下一步操作
arr[arr >= 10] = 0
print(arr)
'''
[[1 2 3 4]
 [5 6 7 8]
 [9 0 0 0]]
'''

4.多维数组的合并

arr1 = np.array([[1, 1, 1], [1, 1, 1]])
arr2 = np.array([[2, 2, 2], [2, 2, 2]])
# vstack和hstack只能放一个参数,这个参数必须是容器
# np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组
arr3 = np.vstack([arr1, arr2])   #里面以元组形式或列表形式放都可以
print(arr3)
'''
[[1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]
'''
# np.hstack:按水平方向(列顺序)堆叠数组构成一个新的数组
arr4 = np.hstack([arr1, arr2])
print(arr4)
'''
[[1 1 1 2 2 2]
 [1 1 1 2 2 2]]
'''
# np.concatenate合并多维数组,默认是按列合并(也就是每行的元素个数必须相同)
arr5 = np.concatenate((arr1, arr2))
print(arr5)
'''
[[1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]
'''
# 在numpy中,为了统一处理,只要有axis参数的,axes=0就是列,axis=1就是行
arr5 = np.concatenate([arr1, arr2], axis=0)    # 垂直
print(arr5)
'''
[[1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]
'''
arr5 = np.concatenate([arr1, arr2], axis=1)    # 水平
print(arr5)
'''
[[1 1 1 2 2 2]
 [1 1 1 2 2 2]]
'''

5.通过函数方法创建多维数组

  • 一维数组
print(np.arange(10))     # [0 1 2 3 4 5 6 7 8 9]
  • np.ones() 全1矩阵
print(np.ones([3,4]))   # 默认是浮点型,dtype=float
'''
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
'''
print(np.ones((3,2,1),dtype=int))   # 2和1控制二维数组中的行和列,3才是三维数组中的“z轴”
'''
两行一列三层
[[[1]
  [1]]

 [[1]
  [1]]

 [[1]
  [1]]]
'''
  • np.zeros() 全0矩阵
# bytes默认是浮点型,可以用bytes=int输出整型格式
print(np.zeros((3, 2, 2)))  # 3控制三维的层数,2,2控制二维数组的行和列
'''
两行两列三层
[[[0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]]]
'''
  • np.eye() 构造多个主元的单位矩阵
'''
主元就是每个非零行第一个非零元素就是主元。
1是主元,在矩阵中从左上角斜着排放到右下角
构成行和列相等的矩阵

'''
print(np.eye(4))      # 构造4个主元的单位矩阵
'''
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
'''
  • np.empty() 构造一个随机矩阵,里面的元素是随机生成的
print(np.empty([3,2]))
'''
[[2.12199579e-314 2.12199579e-314]
 [2.12199579e-314 4.24399158e-314]
 [4.24399158e-314 4.24399158e-314]]
'''

6.矩阵的运算

'''
+  两个矩阵对应元素相加
-  两个矩阵对应元素相减
*  两个矩阵对应元素相乘
/  两个矩阵对应元素相除,如果都是整数则取商
%  两个矩阵对应元素相除后取余数
**n    单个矩阵每个元素都取n次方,如arr**2:arr中的每个元素都取平方
'''

7.多维数组的点乘和转置(了解)

arr1 = np.array([[1, 1, 1], [1, 1, 1]])
arr2 = np.array([[1,1,1],[2,2,2],[3,3,3]])
arr3 = arr2.T      # 转置,将行和列的元素进行互换
print(arr3)
'''
[[1 2 3]
 [1 2 3]
 [1 2 3]]
'''
arr = np.dot(arr1,arr3)   # 点乘
print(arr)
'''
[[3 6 9]
 [3 6 9]]
'''

8.其他

# 求逆
np.linalg.inv()

#最大值
print(arr1.max())   # 1

# 最小值
print(arr2.min())   # 1

# np.random.rand() 生成随机元素的矩阵
print(np.random.rand(3,3))   # 元素的值在0到1之间
'''[[0.343468   0.54926958 0.38615662]
 [0.32390036 0.37597149 0.5029658 ]
 [0.84369977 0.0396894  0.49684206]]'''

# np.random.seed()  随机数种子
np.random.seed(1)
print(np.random.rand(3,3))   # 永不随机,固定的
'''
[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
 [3.02332573e-01 1.46755891e-01 9.23385948e-02]
 [1.86260211e-01 3.45560727e-01 3.96767474e-01]]
'''

# 和上面一样,固定随机元素,永不随机
res = np.random.RandomState(1)
print(res.rand(3,3))
'''[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
 [3.02332573e-01 1.46755891e-01 9.23385948e-02]
 [1.86260211e-01 3.45560727e-01 3.96767474e-01]]'''

第三十七篇 numpy模块

原文:https://www.cnblogs.com/itboy-newking/p/11041703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!