[学习笔记] Numpy基础

上专业选修《数据分析程序设计》课程,老师串讲了Numpy基础,边听边用jupyter敲了下——理解+笔记。

老师讲的很全很系统,有些点没有记录,在PPT里就不搬了。

环境:python3.6 vscode+jupyter扩展

#%%
#------------------------------2019.9.23 NumPy-----------------------------
import numpy as np
# 1.NumPy在一个连续的内存块中存储数据
# 2.性能差异
my_arr = np.arange(100000)
my_list = list(range(10000))
print(my_arr) #%%
# 1.ndarry:一种多维数组对象
data = np.random.randn(2,3)
print(data,'\n')
print(data*10,'\n')
print(data+data,'\n')
# 1.1.ndarry通用的同构数据多为容器——所有元素必须是相同类型的
# .shape 返回表示各维度大小的元组
# .dtype 返回类型
print(data.shape)
print(data.dtype) #%%
# 1.2.创建ndarry
# 1.2.1.用array函数直接创建,dtype自动判定 data_list = [1,1.5,2]
arr1 = np.array(data_list)
print(arr1)
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2.dtype) # 可以用属性ndim和shape验证
arr2.ndim #只返回维数
# eg:arr_empty = np.empty((2,3,4,2))
# arr_empty为4 #%%
#一般numpy创建的数组类型为浮点数
# 1.2.2特定函数创建数组,传入表示形状的元组即可。
# zeros
# ones
# empty 创建一个没有任何具体值的数组
arr_zero = np.zeros(10)
arr_one = np.ones((2,3))
arr_empty = np.empty((2,3,4,2))
print(arr_zero)
print(arr_one)
print(arr_empty)
print(arr_empty.ndim)
# arange
np.arange(15)
# 位矩阵 #%%
# 1.3类型 # 创建时指定
arr3 = np.array([1,2,3])
arr4 = np.array([1,2,3],dtype='float64')
print(arr3.dtype)
print(arr4.dtype) # 转换类型
arr3 = arr3.astype(np.float64)
print(arr3.dtype) # 浮点型转整数——舍弃小数点后
arr_float = np.random.rand(1,10)*10
print(arr_float)
arr_float = arr_float.astype(np.int32)
print(arr_float) # 某字符串数组表示的全是数字,可以直接用astype转为数值形式
arr_string = np.array(['1.0','2.0','3.0'])
print(arr_string.dtype)
arr_string = arr_string.astype(np.float64)
print(arr_string.dtype)
print(arr_string)
#adtype总会创建一个数据备份,即使现类型和目标类型相同 #%%
# 1.4运算
arr = np.array([[1.,2.,3.], [4.,5.,6.]])
print(arr)
print(arr-arr)
print(arr*arr)
print(1/arr)
print(arr**0.5) #和标量运算,数组每个元素都和此标量运算
arr_compare = np.array([ [0,4,1], [7,2,12] ])
print(arr_compare > arr) #%%
# 1.5切片、索引
# 对数字切片的修改,是直接对数组本身修改(python的list列表不是,是对副本操作)
# 对ndarray切片的副本操作:arr[5:8].cpoy()。这样不更改原数组
arr_sl = np.arange(10)
print(arr_sl)
arr_sl[3:6] = 999 #广播
print(arr_sl)
arr_slice = arr_sl[3:6]
arr_slice[:] = 888
print(arr_sl) li = list(range(10))
list_slice = li[2:8]
list_slice[0] = 666
print(list_slice)
print(li) arr2d = np.array([[1.,2.,3.], [4.,5.,6.]])
#索引
print(arr2d[0][1])
#同
print(arr2d[0,1])
#多维数组中,若省略了后面的索引,则返回对象是一个维度低一点的ndarray
arr3d = np.array([ [ [1,2,3],[4,5,6] ], [ [7,8,9],[10,11,12] ] ])
print(arr3d.shape)
print(arr3d)
print(arr3d[0,1]) # 访问索引已(0,1)开头的那些值
arr3d[0] = 999
print(arr3d) #%%
#1.6布尔
# 布尔型索引选取数组中的数据,总是创建副本,即使返回一模一样的数组也是
names = np.array(['Bob','Peter','Bob','Jenny'])
data_arr = np.random.randn(4,7)
print(data_arr)
arr_bool = names=='Bob'
print(arr_bool) #[ True False True False]
print(data_arr[arr_bool])
print('------------------------')
print(data_arr[names=='Bob',5:]) #选取Bob,并索引列 #%%
# 1.6.2 布尔取反
# way1:
names!='Bob'
# way2:
data_arr[~(names=='Bob')] #%%
# 1.6.3 布尔组合
mask = (names=='Bob')|(names=='Peter')
data_arr[mask] data_arr[data_arr>1] #%%
# 1.7花式索引
# 为了按特定顺序选中数据,那么传入表示顺序的[]即可
data = np.arange(80).reshape((8,10))
data[[3,1,4]] data[[1,5,3],[0,3,2]] #返回(1,0),(5,3),(3,2)位置的数据
data[[1,5,7,2]][:,[0,3,1,2]] #列所有元素都输出,但按0 3 1 2的顺序
# 行 列 #%%
# 1.7.1花式索引的转置
# 花式索引和切片不一样,它总是副本
# 转置不是副本,是本身
arr = np.arange(15).reshape((3,5))
arr.T
# transpose 高维数组转置 #%%
# 2.通用数组
arr = np.arange(10)
print(np.sqrt(arr))
print(arr) # 每个位置上,最大的那个
# np.maximum(x,y) # 分别返回小数部分、整数部分
remainder, whole_part = np.modf(arr)
print(remainder)
print(whole_part) # abs
# square
# exp
# log log10 log2 log1p
# ... #%%
# 3利用数组进行数据处理 # 3.1
points = np.arange(-5,5,0.01)
xs,ys = np.meshgrid(points,points) # 生成网格点坐标矩阵
ys # 3.2 np.where
arr = np.random.randn(3,4)
print(arr)
print(np.where(arr>0,2,-2)) # 3.3数学和统计方法
# 既可以当实例方法,也可以当顶级numpy函数用
print(arr.mean()) # 对特定轴向
arr.mean(axis=0) #对列求
# 或
arr.mean(0) arr.sort(1) #对行排序就地排序 np.unique(arr) #删除重复的元素 # cumsum对特定轴
arr = np.arange(9).reshape(3,3)
print(arr)
print(arr.cumsum(1))
# 同理 cumprod 累乘 # 对布尔型
arr = np.random.randn(100)
print( (arr>0).sum() )
# any() 检查数组中是否存在>=1个True
# all() 检查数组中是否全为True #%%
# 4.线性代数
# x.dot(y) 同 np.dot(x,y) # diag 返回对角线矩阵
# trace
# det
# eig
# inv
# pinv
# qr
# svd #%%
# 5.伪随机数生成
# 正态分布
samples = np.random.normal(size=(3,3))
# 标准整体分布
ss = np.random.randn(3)
# 给定上下限随机整数
sss = np.random.randint(10,size=(4)) # [4 6 4 1]

[学习笔记] Numpy基础 系统学习的更多相关文章

  1. Linux学习笔记之——基础命令学习

    1.find 按照名字查找:find / -name file_name   2.zip压缩 1) 我想把一个文件repartition.txt和一个目录invader压缩成为amateur.zip: ...

  2. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  3. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

  6. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  7. ELK-6.5.3学习笔记–elk基础环境安装

    本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...

  8. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  9. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

随机推荐

  1. Go的100天之旅-04基础数据类型

    基础数据类型 在变量的定义中,我们讲了每个变量是有类型的,类型在计算机中是用来约束数据的解释.Go语言和其它计算机语言一样,提供丰富了丰富的数据类型,我们就来看看到底有哪些类型,同时也可以比较一下它和 ...

  2. 从连接器组件看Tomcat的线程模型——连接器简介

    Connector组件介绍 Connector(连接器)组件是Tomcat最核心的两个组件之一,主要的职责是负责接收客户端连接和客户端请求的处理加工.每个Connector都将指定一个端口进行监听,分 ...

  3. Python Ethical Hacking - Malware Packaging(3)

    Convert Python Programs to OS X Executables https://files.pythonhosted.org/packages/4a/08/6ca123073a ...

  4. 【SpringBoot】 中时间类型 序列化、反序列化、格式处理

    [SpringBoot] 中时间类型 序列化.反序列化.格式处理 Date yml全局配置 spring: jackson: time-zone: GMT+8 date-format: yyyy-MM ...

  5. Python协程之Gevent模块

    背景 进程是操作系统分配资源的最小单位,每个进程独享4G的内存地址空间,因此进程内数据是安全的,检查间的通信需要使用特定的方法.同理,正是因为进程是数据安全的,所以导致进程的切换是一个很麻烦效率不高的 ...

  6. Shell基本语法---函数

    函数 函数定义 function 函数名 () { 指令... return n } 函数调用及参数传递 function func() { echo "第零个参数:" $ #脚本 ...

  7. SW算法求全局最小割(Stoer-Wagner算法)

    我找到的唯一能看懂的题解:[ZZ]最小割集Stoer-Wagner算法 似乎是一个冷门算法,连oi-wiki上都没有,不过洛谷上竟然有它的模板题,并且2017百度之星的资格赛还考到了.于是来学习一下. ...

  8. 题解 洛谷 P3340 【[ZJOI2014]星系调查】

    根据题意,发现题目中的图,其实就是一颗树或者是一颗基环树,每个节点上有一个点对\((x,y)\),每次询问为给定端点,找一条直线到端点间的所有点的距离之和最小. 设这条直线为\(y=kx+b\),根据 ...

  9. 题解 UVA1608 【不无聊的序列 Non-boring sequences】

    思路: 算法很显然: 一.在区间\([l,r]\)找到一个只出现一次的元素P(如果不存在,那么序列\(boring\)) 二.递归处理区间\([l,p-1]\)和区间\([p+1,r]\). 其关键在 ...

  10. Error: no such table: device;的问题的解决,去掉表名device后面的分号;

    sqlite> .mode csvsqlite> .import device.txt device;Error: no such table: device;sqlite> .im ...