day27-1 numpy模块
numpy
- 多维数组(列表)的运算
 
# 约定俗成定义为np
import numpy as np
array
- 数据类型,有点像列表
 
一维数组
- 只有一行
 - 相当于数学中的线
 
lis = [1, 2, 3]
print(np.array(lis))
[1 2 3]
二维数组(用的最多)
- 有行有列
 - 相当于数学中的面,其中有多条线,也就是装了多个一维数组
 
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
[[1 2 3]
 [4 5 6]]
np.array和list的区别
- np.array是多维的,list是一维的
 - numpy的操作更加全面
 
获取多维数组的属性
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr.dtype)      # 查看元素的数据类型
print(arr.size)       # 数组元素的个数
print(arr.ndim)      # 数组的维度
print(arr.shape)        # 把行和列返回在一个元祖中
print(arr.shape[0])     # 行
print(arr.shape[1])     # 列
int32
8
2
(2, 4)
2
4
多维数组的索引与切片
- 中括号加索引,行和列用逗号分开
 
print(arr)
print('-' * 10)
print(arr[1, 2])     # 第二行第三列
print(arr[0, [0, 1, 2, 3]])    # 第一行所有的值
print(arr[0, :])    # 第一行所有的值切片
print(arr[:, 0])    # 第一列所有的值切片
print(arr[:, :])    # 整个多维数组切片
[[1 2 3 4]
 [5 6 7 8]]
----------
7
[1 2 3 4]
[1 2 3 4]
[1 5]
[[1 2 3 4]
 [5 6 7 8]]
花式索引
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
#### 获取 5,7,9,10
arr[ [4, 6, 8, 9] ]  ### 列表嵌套列表, 内层列表的值对应的是需求的值的索引值
([5, 7, 9, 10])
高级功能
- 加入判断,筛选功能
 
# 筛选出值大于50的数
arr = np.array([[12, 123, 20], [145, 56, 24], [51, 1, 2]])
print(arr)
print('-' * 20)
print(arr > 50)	# 布尔型索引
print('-' * 20)
print(arr[arr > 50])
print('-' * 20)
[[ 12 123  20]
 [145  56  24]
 [ 51   1   2]]
--------------------
[[False  True False]
 [ True  True False]
 [ True False False]]
--------------------
[123 145  56  51]
--------------------
多维数组的元素替换
arr = np.array([[12, 123, 20], [145, 56, 24], [51, 1, 2]])
print(arr)
print('-' * 20)
arr[1, 2] = 20    # 第二行的第三个元素改为20
print(arr)
print('-' * 20)
arr[1, :] = 20    # 第一行所有元素改为0
print(arr)
print('-' * 20)
arr[arr > 50] = 40  # 大于50的全变为40
print(arr)
print('-' * 20)
[[ 12 123  20]
 [145  56  24]
 [ 51   1   2]]
--------------------
[[ 12 123  20]
 [145  56  20]
 [ 51   1   2]]
--------------------
[[ 12 123  20]
 [ 20  20  20]
 [ 51   1   2]]
--------------------
[[12 40 20]
 [20 20 20]
 [40  1  2]]
--------------------
多维数组的合并
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
- vstack和hstack只能放一个参数,这个参数必须是容器
 
# vstack和hstack
print(np.vstack((arr1, arr2)))  # v:vertical 垂直
print('-' * 20)
print(np.hstack([arr1, arr2]))  # h:horizon 水平
print('-' * 20)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
--------------------
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]
--------------------
- 在numpy中,为了统一做处理,只要有axis参数的,axis=0就是列,axis=1就是行
 
# concatenate
print(np.concatenate((arr1, arr2)))   # 默认是垂直
print('-' * 20)
print(np.concatenate((arr1, arr2), axis=0))  # 0是列
print('-' * 20)
print(np.concatenate((arr1, arr2), axis=1))  # 1是行
print('-' * 20)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
--------------------
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
--------------------
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]
--------------------
通过函数方法创建多维数组
创建一维数组
- arange
 
print(np.arange(10))
print(np.arange(1, 10, 2))
[0 1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
- linspace
 
# 创建一个从2到5,一共有五个值的一位数组,不包括5
# num表示有多少个值,默认是50,endpoint表示是否包括最大值,默认是True
np.linspace(2,5, num=5, endpoint=False)
array([2. , 2.6, 3.2, 3.8, 4.4])
创建多维数组
- zeros
 
# zeros全是0
print(np.zeros((3, 4)))
print('-' * 20)
print(np.zeros((2, 4, 3)))     # 3控制一维,(3,4)控制二维,(3,4,5)控制三维
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
--------------------
[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]
 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]
- ones
 
# ones全是1
print(np.ones((3, 4)))
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
- eye
 
print(np.eye(5))
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
- empty
 
np.empty((2,3), dtype=int)  ### 随机生成指定维度的随机数
([[856,   0, 856],
 [  0,   1,   0]])
- reshape
 
arr = np.arange(10)
arr.reshape(2,5)  #### 一维数组转换成二维数组
([[0, 1, 2, 3, 4],
 [5, 6, 7, 8, 9]])
矩阵的向量运算
+	两个矩阵对应元素相加
-	两个矩阵对应元素相减
*	两个矩阵对应元素相乘
/	两个矩阵对应元素相除,如果都是整数则取商
%	两个矩阵对应元素相除后取余数
**n	单个矩阵每个元素都取n次方,如**2:每个元素都取平方
# 元素对应相加,可以加一维,但是不要这么做
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
print(arr1+arr2)
#...其余方法都大同小异
[[ 8 10 12]
 [14 16 18]]
通用函数
np.abs([-1,-2,34,5])  ### 求一个绝对值
np.fabs([-2.3,-3.4, 5.6])  #### 求浮点数的绝对值
np.sqrt(4)   #### 求一个数的平方根
print('----------')
np.square([5,3,4,6])  #### 求平方
np.exp(2)  ### e^2  e的取值是 2.7181
np.log(10)  # 以e为底
array([ 1,  2, 34,  5])
array([2.3, 3.4, 5.6])
2.0
----------
array([25,  9, 16, 36], dtype=int32)
7.38905609893065
2.302585092994046
- 数字相关
 
a = a = np.array([1,2,3,4])
np.sum(a)  ### 求和
np.mean(a)	### 求平均值
np.max(a)	### 最大值
np.argmax(a)  ### 最大值的索引
print('----------')
np.var(a)	### 求方差
np.std(a)	### 求标准差
print('----------')
np.ceil(10.4) ### ceil:天花板  向上取整
np.floor(10.6) ### floor:地板 向下取整
np.rint(10.8)  #### 四舍五入
np.modf(10.7) ### 把整数和小数分开
10
2.75
4
3
----------
1.25
1.118033988749895
----------
11.0
10.0
11.0
(0.6999999999999993, 10.0)
- isnan
 
np.isnan(45)	#### 用来判断是否是一个数,nan : not a number,所以为False代表是一个数字
np.nan
np.isnan(np.nan)
np.isnan([1,2,3,np.nan,23])
np.nan == np.nan
False
nan
True
array([False, False, False,  True, False])
False
- isinf
 
np.inf	# 无穷大
inf
点乘,转置,求逆(了解,数学知识)
# 点乘
# 需要一个(m,n)的数组和一个(n,m)的数组
# T可以把数组转置
np.dot(arr1, arr2.T)
array([[ 50,  68],
       [122, 167]])
# 求逆
np.linalg.inv(np.dot(arr1, arr2.T))
array([[ 3.09259259, -1.25925926],
       [-2.25925926,  0.92592593]])
极值
print(arr1)
print(arr1.max())
print(arr1.min())
[[1 2 3]
 [4 5 6]]
6
1
numpy生成随机数
np.random.rand(3, 4)
array([[0.95163457, 0.8643344 , 0.86843741, 0.45000529],
       [0.01025429, 0.25391508, 0.28262799, 0.88679772],
       [0.43937459, 0.13525713, 0.13961072, 0.61232842]])
固定随机数,让它不随机
rs = np.random.RandomState(1)
print(rs.rand(3, 4))
# 和上面作用相同
# np.random.seed(1)
# print(np.random.rand(3, 4))
[[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 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
三维数组(了解)
- 多个面(二维数组)
 
day27-1 numpy模块的更多相关文章
- Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块
		
基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...
 - 【Python 数据分析】Numpy模块
		
Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...
 - python numpy模块
		
目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...
 - Python及bs4、lxml、numpy模块包的安装
		
http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...
 - numpy模块(对矩阵的处理,ndarray对象)
		
6.12自我总结 一.numpy模块 import numpy as np约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/referen ...
 - Python3:numpy模块中的argsort()函数
		
Python3:numpy模块中的argsort()函数 argsort函数是Numpy模块中的函数: >>> import numpy >>> help(nu ...
 - 3 numpy模块
		
Numpy 什么是Numpy:Numeric Python Numpy模块是Python的一种开源的数值计算扩展. 1 一个强大的N维数组对象Array ...
 - Day 19 numpy 模块
		
numpy 模块(多维数组) import numpy as np arr=np.array([1,2,3,4],[5,6,7,8]) print(arr) #[[1 2 3 4] #[5 6 7 8 ...
 - Pathon中numpy模块
		
目录 numpy模块 切割矩阵 矩阵元素替换 矩阵的合并 通过函数创建矩阵 fromstring/fromfunctions 矩阵的运算 常用矩阵运函数 矩阵的点乘 矩阵的逆 矩阵的其他操作 nump ...
 - 开发技术--Numpy模块
		
开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...
 
随机推荐
- Hibernate事务管理-HibernateTransactionManager-对hibernate session的管理
			
由于对SSH还停留在比较初级的应用水平上,今天在遇到一个疑惑时折腾了很久,具体问题是这样的, 有这么一个测试方法, public static void test1() { ApplicationCo ...
 - 和socket、rs232通信遇到的糟糕问题。备查!
			
procedure Tfrm_FoldingCloth.btn1Click(Sender: TObject); var SND:array of byte; begin if Not cnrs232. ...
 - Summary of Memory Management Methods
			
Summary of Memory Management Methods Table 18-1 summarizes the various memory management methods. If ...
 - MariaDB 10.x 将包含多主复制功能
			
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/multi_so ...
 - HDU - 1723 - Distribute Message
			
先上题目: Distribute Message Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
 - HDU  - 1243 - 反恐训练营
			
先上题目: 反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
 - 扩展欧几里德 poj1061 青蛙的约会
			
扩展欧几里德很经典.可是也有时候挺难用的.一些东西一下子想不明确.. 于是来了一个逆天模板..仅仅要能列出Ax+By=C.就能解出x>=bound的一组解了~ LL exgcd(LL a, LL ...
 - Android 删除新版安卓fragment_main.xml
			
在新版本号的ADT中,创建androidproject时默认会产生两个xml文件--fragment_main和activity_main. 个人建议把fragment_main这个文件删除掉 1)将 ...
 - luogu3111 [USACO14DEC]牛慢跑Cow Jog_Sliver
			
题目大意 有N (1 <= N <= 100,000)头奶牛在一个单人的超长跑道上慢跑,每头牛的起点位置都不同.由于是单人跑道,所有他们之间不能相互超越.当一头速度快的奶牛追上另外一头奶牛 ...
 - hdoj--3635--Dragon Balls(并查集记录深度)
			
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...