day26-1 numpy模块
时间:2019-06-12
本文章向大家介绍day26-1 numpy模块,主要包括day26-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是一维的
- list对一维数组做一些操作,而numpy是对多维数组进行操作
获取多维数组的行和列
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr.shape) # 把行和列返回在一个元祖中
print(arr.shape[0]) # 行
print(arr.shape[1]) # 列
(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]]
高级功能
- 加入判断,筛选功能
# 筛选出值大于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]]
--------------------
通过函数方法创建多维数组
创建一维数组
- range
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]
创建多维数组
- 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.]]
- eys
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.]]
矩阵的运算
+ 两个矩阵对应元素相加
- 两个矩阵对应元素相减
* 两个矩阵对应元素相乘
/ 两个矩阵对应元素相除,如果都是整数则取商
% 两个矩阵对应元素相除后取余数
**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]]
点乘,转置,求逆(了解,数学知识)
# 点乘
# 需要一个(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]]
三维数组(了解)
- 多个面(二维数组)
原文地址:https://www.cnblogs.com/lucky75/p/11011604.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 26.Python文件内容的迭代
- 28.Python中对象的特性
- 如何基于jackson动态序列化指定字段
- c/c++补完计划(五): 平衡二叉树和二叉搜索树
- 【原创】Java并发编程系列30 | ThreadLocal
- c/c++补完计划(六): 语法糖lambda
- 从别人的代码中学习golang系列--03
- Flink写出数据到HBase的Sink实现
- 「MoreThanJava」Day 4:面向对象基础
- RTSP协议视频平台EasyNVR接入EasyNVS通道不显示任何数据怎么处理?
- RTSP协议视频平台EasyNVR接入视频综合管理平台EasyNVS可以自由修改配置吗?
- 使用Azure人脸API对图片进行人脸识别
- 视频综合管理平台EasyNVS显示的rtsp和rtmp穿透地址错误如何解决?
- 开发RTSP协议视频平台EasyNVR采用ffmpeg集成fdk-aac报no member named “encoderDelay”
- 微信小程序开发实战(17):用画布画一张笑脸