文章目录

  • 数据分析第四讲 numpy学习+numpy读取本地数据
    • 一、numpy数组
      • 1.numpy介绍
      • 2.numpy基础
      • 3.numpy常见的数据类型
      • 4.数组的形状
      • 5.数组的计算
      • 6.数组的广播
    • 二、numpy读取本地数据和索引
      • 1.numpy读取本地数据
      • 2.读取数据的方法
      • 3.numpy中的转置
      • 4.轴(axis)
      • 4.numpy索引和切片

数据分析第四讲 numpy学习+numpy读取本地数据

一、numpy数组

1.numpy介绍

  • numpy(numerical python)
    一个在Python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于在大型、多维数组上执行数值运算
  • scipy
    1.在numpy库的基础上增加了众多的数学、科学及工程常用的库函数
    2.线性代数、图像处理

2.numpy基础

  • 1.创建数组
    np.array([1,2,3,4,5,6])
    np.array(range(1,7))
    np.arange(1,7)
  • 2.数组的类名
  • 3.数据的类型
  • 示例
import numpy as np  # pip install numpy# 数组 array list
a = np.array([1, 2, 3, 4, 5, 6])
print(a)  # [1 2 3 4 5 6]
b = np.array(range(1, 7))
print(b)  # [1 2 3 4 5 6]
c = np.arange(1, 7)
print(c)  # [1 2 3 4 5 6]# 类名
print(type(a))  # <class 'numpy.ndarray'># 数据类型
print(a.dtype)  # int32
a1 = np.array([1.8, 2.0, 3.4, 4.6, 5.2, 6.9])
print(a1.dtype)  # float64
a2 = np.array([True, False])
print(a2.dtype)  # bool
a3 = np.array(['YANGYU', 'yangyu', 1, 3])
print(a3.dtype)  # <U6
a4 = np.array([1.4, 1, 3])
print(a4.dtype)  # float64

3.numpy常见的数据类型

  • numpy常见的数据类型
    类型 说明
    bool_ 布尔型数据类型(True 或者 False)
    int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
    intc 与 C 的 int 类型一样,一般是 int32 或 int 64
    intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
    int8 字节(-128 to 127)
    int16 整数(-32768 to 32767)
    int32 整数(-2147483648 to 2147483647)
    int64 整数(-9223372036854775808 to 9223372036854775807)
    uint8 无符号整数(0 to 255)
    uint16 无符号整数(0 to 65535)
    uint32 无符号整数(0 to 4294967295)
    uint64 无符号整数(0 to 18446744073709551615)
    float_ float64 类型的简写
    float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
    float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
    float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
    complex_ complex128 类型的简写,即 128 位复数
    complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
    complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)
    numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。

  • 数据类型的操作
    1.指定创建的数组的数据类型
    2.修改数组的数据类型
    3.修改浮点型的小数位数

  • 示例

import numpy as np  # pip install numpy
import random# 数组类型的操作
a = np.array([1,0,1,0], dtype=bool)
print(a,a.dtype)  # [ True False  True False] boola1 = np.array([1,0,1,0],dtype="float32")
print(a1,a1.dtype)  # [1. 0. 1. 0.] float32a2 = np.array([1,0,1,0],dtype="int64")
print(a2,a2.dtype)  # [1 0 1 0] int64# 修改数组的数据类型 int64->float32
a3 = a2.astype("float32")
print(a3.dtype)
print("===========================================")
print(random.random())  # 0.1545033085242674 随机生成0到1的小数
b = np.array([random.random() for i in range(4)])
print(b)  # [0.03633417 0.33103144 0.83817931 0.04367941]
# python 四舍五入 round
print(np.round(b,2))  # [0.04 0.33 0.84 0.04]
print(np.around(b,3))  # [0.036 0.331 0.838 0.044]

4.数组的形状

  • 数组的形状
    1.查看数组维度
    2.查看数组形状
    3.修改数组形状
  • 示例
import numpy as np# 数组的形状
t1 = np.array(range(6))
# ndim
print(t1, t1.ndim)  # [0 1 2 3 4 5] 1表示1维
# 调用类中的属性
print(t1.shape)  # (6,)  形状t2 = np.array([[1, 2, 3], [4, 5, 6]])
# ndim
print(t2, t2.ndim)
'''
[[1 2 3][4 5 6]] 2  '''  # 2表示2维
print(t2.shape)  # (2, 3)  形状 两行三列# t21 = np.array([[1,2,3],[4,5]])  # 非对称写法没有意义 [list([1, 2, 3]) list([4, 5])] <class 'numpy.ndarray'> 1  表示1维
# print(t21,type(t21),t21.ndim)
# print(t21.shape)  # (2,)  # 形状 认为它是个1维数组t3 = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
print(t3)
'''
[[[1 2 3][4 5 6][7 8 9]]]'''
print(t3.ndim)  # 3 表示3维
print(t3.shape)  # 形状(1, 3, 3)t3_2 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(t3_2)
'''
[[[ 1  2  3][ 4  5  6]][[ 7  8  9][10 11 12]]]'''
print(t3_2.ndim)  # 3 表示3维
print(t3_2.shape)  # 形状(2, 2, 3)# 修改数组的形状
# 1维变2维
t1 = t1.reshape(2, 3)  # reshape 函数不会修改本身,需要一个接收变量
print(t1)
'''
[[0 1 2][3 4 5]]'''
print(t1.ndim)  # 2
# 3维变1维
t11 = t3_2.reshape(12)
print(t11)  # [ 1  2  3  4  5  6  7  8  9 10 11 12]
print(t11.ndim)  # 1# t2的行*列  2维变1维
t2 = t2.reshape(t2.shape[0]*t2.shape[1])
print(t2)  # [1 2 3 4 5 6]# t3  3维变1维
t1_1 = t3.reshape(t3.shape[0]*t3.shape[1]*t3.shape[2])
print(t1_1)   # [1 2 3 4 5 6 7 8 9]# 转成1维
res = t3_2.flatten()  # 不管是几维,都转成1维
print(res)  # [ 1  2  3  4  5  6  7  8  9 10 11 12]

5.数组的计算

  • 数组的计算
    1.数组和数的计算
    2.数组和数组的计算
  • 示例
import numpy as npprint(np.zeros(3))  # [0. 0. 0.]
print(np.zeros((3,4)))  # 3行4列全零数组
'''
[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]'''
print(np.ones((3,4)))  # 3行4列全1数组
'''
[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]'''
print("="*30)
# 数组和数的计算 + - * /
t = np.array([[1,2,3],[4,5,6]])
print(t+1)
'''
[[2 3 4][5 6 7]]'''
print("="*30)
print(t*3)
'''
[[ 3  6  9][12 15 18]]'''
print("="*30)
t1 = np.arange(6)
print(t1)  # [0 1 2 3 4 5]
print(t1/0)  # [nan inf inf inf inf inf]  nan:not a number inf无穷大# 数组和数组的计算 + - * /
t2 = np.array([list(range(3,9)),list(range(4,10))])  # 也可以写t2 = np.array([range(3,9),range(4,10)])
t3 = np.array([range(3,9),range(4,10)])
print(t2)
'''
[[3 4 5 6 7 8][4 5 6 7 8 9]]'''
print(t2 + t3)  # 对应位相加而不是数组的拼接
'''
[[ 6  8 10 12 14 16][ 8 10 12 14 16 18]]'''
print(t2 * t3)  # 对应位相乘
'''
[[ 9 16 25 36 49 64][16 25 36 49 64 81]]'''
print(t2 / t3)  # 对应位相除,除完是浮点型
'''
[[1. 1. 1. 1. 1. 1.][1. 1. 1. 1. 1. 1.]]'''
print("="*30)
t4 = np.array([[1],[2]])  # 2维  2行1列
print(t4)
'''
[[1][2]]'''
print(t2)
'''
[[3 4 5 6 7 8][4 5 6 7 8 9]]'''
print(t2 + t4)   # 2行1列  + 2行6列
'''
[[ 4  5  6  7  8  9][ 6  7  8  9 10 11]]'''
print("="*30)
t5 = np.array([1,2,3,4,5,6])
print(t5)
'''
[1 2 3 4 5 6]'''
print(t2)
'''
[[3 4 5 6 7 8][4 5 6 7 8 9]]'''
print(t2 + t5)
'''
[[ 4  6  8 10 12 14][ 5  7  9 11 13 15]]'''
# 行或者列至少要有一样是相同的才能进行运算

6.数组的广播

二、numpy读取本地数据和索引

1.numpy读取本地数据

  • numpy读取数据
    以纯文本形式存储的表格数据(以逗号作为分隔符),通常第一行为列名
    由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据。
  • 示例
# numpy本地数据的读取
import numpy as np# 默认dtype=float, delimiter=None,  csv文件必须指定分隔符为’,‘
t = np.loadtxt('demo.csv', delimiter=',')
print(t)
'''
[[1. 2. 3.][4. 5. 6.][7. 8. 9.]]
'''
print("="*30)  # 指定类型为dtype=int,int可以加引号
t = np.loadtxt('demo.csv', delimiter=',', dtype=int)
print(t)
'''
[[1 2 3][4 5 6][7 8 9]]
'''
print("="*30)   # 跳过第1行skiprows=1
t = np.loadtxt('demo.csv', delimiter=',', dtype=int, skiprows=1)
print(t)
'''
[[4 5 6][7 8 9]]
'''
print("="*30)   # 指定读取的列usecols=2,从0开始算,usecols=2是第3列
t = np.loadtxt('demo.csv', delimiter=',', dtype=int, usecols=2)
print(t)
'''
[3 6 9]
'''
print("="*30)   # 行、列交换unpack=True 转置
t = np.loadtxt('demo.csv', delimiter=',', dtype=int, unpack=True)
print(t)
'''
[[1 4 7][2 5 8][3 6 9]]'''

2.读取数据的方法

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量
([“views”,“likes”,“dislikes”,“comment_total”])的csv

3.numpy中的转置

转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方
便的去处理数据
np.arange(20).reshape(4,5).transpose()
np.arange(20).reshape(4,5).T
np.arange(20).reshape(4,5).swapaxes(1,0)

4.轴(axis)

在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维
数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(3,2, 3)),有0,1,2轴
有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算
哪个方向上面的数字的平均值

轴(axis)

import numpy as npa = np.arange(20).reshape(4, 5)
print(a)
'''
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]]'''
a1 = a.transpose()  # 转置,把原先的行列交换 a.transpose()可以简写为a.T
print(a1)
'''
[[ 0  5 10 15][ 1  6 11 16][ 2  7 12 17][ 3  8 13 18][ 4  9 14 19]]'''
print(a.T)
'''
[[ 0  5 10 15][ 1  6 11 16][ 2  7 12 17][ 3  8 13 18][ 4  9 14 19]]'''
print(a.swapaxes(1, 0))  # 交换轴
'''
[[ 0  5 10 15][ 1  6 11 16][ 2  7 12 17][ 3  8 13 18][ 4  9 14 19]]'''

4.numpy索引和切片

取一行
取连续的多行
取不连续的多行
取列
取连续的多列
取不连续的多列
取多行多列的值
取多个不相邻的点

# numpy索引和切片
import numpy as npt1 = np.loadtxt('GB_video_data_numbers.csv', delimiter=',', dtype=int)
print(t1)
'''
[[7426393   78240   13548     705][ 494203    2651    1309       0][ 142819   13119     151    1141]...[ 109222    4840      35     212][ 626223   22962     532    1559][  99228    1699      23     135]]
'''
# 取1行  第3行t1[2]  是从0开始的
print(t1[2])
'''[142819  13119    151   1141]'''
# 取连续的行  取前3行t1[:3]
print(t1[:3])
'''
[[7426393   78240   13548     705][ 494203    2651    1309       0][ 142819   13119     151    1141]]'''
# 取不连续的行  取第1行和第3行t1[:3:2]    t1[开始位置:结束位置:步长]
print(t1[:3:2])
'''
[[7426393   78240   13548     705][ 142819   13119     151    1141]]'''
# 取不连续的行  取第1行和第3行t1[[0, 2]]
print(t1[[0, 2]])
'''
[[7426393   78240   13548     705][ 142819   13119     151    1141]]'''
# 取列   行,列  t1[:, 0] 取所有行的第1列
print(t1[:, 0])
'''[7426393  494203  142819 ...  109222  626223   99228]'''
# 取连续的列  取前2列 t1[:, 0:2] 或者t1[:, :2]
print(t1[:, :2])
'''
[[7426393   78240][ 494203    2651][ 142819   13119]...[ 109222    4840][ 626223   22962][  99228    1699]]
'''
# 取不连续的列 取第1列和第4列 t1[:, [0, 3]]
print(t1[:, [0, 3]])
'''
[[7426393     705][ 494203       0][ 142819    1141]...[ 109222     212][ 626223    1559][  99228     135]]'''
# 取多行多列  取第2、3行的前两列 t1[1:3, :2]
print(t1[1:3, :2])
'''
[[494203   2651][142819  13119]]'''
# 取多个不相邻的点  取第2行的第2个和第4个
print(t1[[1, 1], [1, 3]])
'''[2651    0]'''
print("=" * 30)
# 取多个不相邻的点  取第3行的第2个和第2行的第4个
print(t1[[2, 1], [1, 3]])
'''[13119     0]'''
# 取多个不相邻的点  取第2行的第1个,第4行的第2个,第2行的第2个
print(t1[[1, 3, 1], [0, 1, 1]])
'''[494203  65729   2651]'''

数据分析 第四讲 numpy学习+numpy读取本地数据和索引相关推荐

  1. 《视觉SLAM十四讲》学习笔记:第5讲相机与图像

    <视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...

  2. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  3. 【Python学习】——读取HDF数据

    Hierarchical Data Format (HDF)--分层数据格式,通常包含多维数据,许多水文气象相关的数 据格式都是HDF.本文旨在利用python语言实现数据的快速读取,数据来自GLAS ...

  4. 【视觉SLAM十四讲】学习笔记-第二讲

    其他章节:     第二讲:初识SLAM 初识SLAM SLAM(Simultaneous Localization and Mapping),同时定位与地图构建.它是指搭载特定传感器主体,在没有环境 ...

  5. 视觉slam十四讲 pdf_《视觉SLAM十四讲》学习笔记+关键知识点汇总(一)

    刚体运动的分解:旋转+平移 旋转:旋转矩阵Rotation Matrix,是行列式为1的正交矩阵(逆为自身转置的矩阵),SO(n)表示特殊正交群 因此变化可表示为:A' = RA+t 在三维向量末尾加 ...

  6. 《视觉SLAM十四讲》学习笔记-摄像机成像公式

    针孔相机模型 摄像机内外参数矩阵 内参数矩阵 外参数矩阵 畸变 径向畸变 切向畸变 双目相机模型 RGB-D模型 针孔相机模型 设P点坐标为 [X,Y,Z]⊤ [ X , Y , Z ] ⊤ [X, ...

  7. 《MySQL实战45讲》——学习笔记31 “误删数据的解决方案(删行/删表/删库/删实例)“

    本篇介绍MySQL误删数据的几种情况以及误删后的处理方法,包括: 使用delete语句误删数据行: 使用drop table或者truncate table语句误删数据表: 使用drop databa ...

  8. python 从同花顺获取数据导出,通达信PYTHON读取本地数据,如何使用python在文件中读取数据?...

    Q1:如何使用python在文件中读取数据? file = open('a','r').readlines()[1] Q2:python怎么将本地一个文件夹的所有文本读进内存中 列出文件,把各个文件打 ...

  9. python数据分析(四)——numpy中的nan和数据的填充

    系列文章: python数据分析(一)--numpy数组的创建 python数据分析(二)--numpy数组的计算 python数据分析(三)--numpy读取本地数据和索引 python数据分析(五 ...

最新文章

  1. 在网页中显示数字时钟
  2. 解压RK3288的boot.img修改init.rc 添加开机自启动脚本
  3. 印度市场,圆不了二线国产手机的美梦
  4. distinct和group by的性能比较
  5. iptables控制较复杂案例
  6. android平台java编程规范_Android Java类编写规范+优化建议
  7. “Rule can only have one resource source”错误
  8. mysql常量,变量,循环语句,存储过程,触发器,分隔符
  9. 本地存储Sqlite的用法:
  10. chromium的部署工具depot_tools和gclient
  11. 《现代操作系统(中文第三版)》课后习题——第六章 死锁
  12. 推荐算法(一)电影推荐系统
  13. Lattice Diamond 的安装以及license的获取
  14. 如何验证扇形面积公式?
  15. 重庆美食地图(绝对霸道)
  16. VRP_SA-模拟退火
  17. P21-前端基础-CSS颜色四种表示方式
  18. 8 excel vba 往多行写入数据
  19. git push遇到错误: [rejected]master - master (non-fast-forward)的解决方法
  20. sw+vba非批量操作=180822

热门文章

  1. Element UI三十一Avatar头像
  2. 第三天:让简历有点色彩
  3. Tableau画树形图、气泡图、词云图、人口金字塔、凹凸图、网络图、弧线图
  4. html字体加粗字号为2,【css】文字基本样式(颜色、倾斜、加粗、字号、行高、字体)...
  5. MAC地址表泛洪攻击
  6. python二进制解码_Python3 二进制数据base64编解码
  7. MATLAB中Sine Wave模块工作机理
  8. java中instanceof的用法和实战
  9. R语言:企业风险分析(3)【蒙特卡罗模拟的可视化,敏感性分析】
  10. 2005年中国科学院院士增选当选院士名单