[笔记][cloudera课程][python数据分析]NumPy数据库

7 篇文章 0 订阅
5 篇文章 0 订阅

NumPy数据分析库

pandas 机器学习 人工智能 等的底层支持
主要内容:

1. NumPy 简介

  • 高性能科学计算和数据分析的基础包
    部分功能
  • ndarray 具有适量算术元算和复杂广播能力的多维数据,快速且节省空间
  • 对整组数据进行快速运算的标准数学函数,无需编写循环
  • 读写磁盘数据的工具 操作内存映射文件
  • 线性代数、随机数生成、傅里叶变换
  • 集成由C、C++、Fortran等语言编写的代码的工具

2. NumPy 数组对象——ndarray

  • 快速而灵活的大数据集容器
  • 可以对整块数据执行一些数学运算
  • 多维数组对象,由两部分组成:①实际数据 ②描述这些数据的元数据
举例1:python 与numpy 对比

python数组操作

numList = list(range(1,10))
numList
numList**0.5 #error!
newNumList = []
for n in numList:
    newNumList.append(n**0.5)
newNumList

用numpy 做数组操作

import numpy as np
np.arange(1,10)
arr = np.arange(1,10)**0.5
arr.dtype #描述元数据
np.arange(1,121).reshape((2,3,4,5))**0.5 #四维数组
举例2:
data1 = list(range(10,20,2))
data1
arr1 = np.array(data1) #将集合类型转换成ndarray类型
type(arr1)
arr2 = np.arange(1,22).reshape(3,7)
arr2
arr2[0]
arr2[0][3] #python、numpy通用
arr2[0,3] # numpy独有

3 numpy相关属性

获取ndarray对象的维度

arr1.ndim,arr2.ndim

获取行列信息

arr2.shape
arr1.shape

创建数组类型

np.ones((3,5)) #默认数据类型为float
np.ones((3,5),dtype=np.str_) #显示设置数据类型

4 Numpy数据类型

dtype(数据类型) 将一块内存解释为特定数据类型所需信息

  • int8/16/32/64 uint8/16/32/64
    有符号和无符号的8/16/32/64位(1/2/4/8字节)整型
  • float16/32/64/128
  • str_
  • bool
  • object
  • string_
  • unicode_
    固定长度的Unicode类型(字节数由平台决定)中文 Linux占3字节,Windows占2字节
举例3:NumPy 模拟商品数据类型

模拟:产品名称、产品销量、产品单价、生产厂家

t = np.dtype([('name',np.str_,40),('nums',np.int32),('price',np.float32),('company',np.str_,40)])
t
sqldata = [('小米 Mix 2手机',20000,1999.00,'小米科技'),('华为honor 12手机',30000,2999,'华为集团')]
type(sqldata)
#np.array(sqldata) #数据默认字符串类型
test = np.array(sqldata,dtype=t) #为了节约空间大小,float小数点后若是0就不显示
test

linspace() 产生等间隔值

np.linspace(1,10) #产生1-10之间的等间隔值
np.linspace(1,10,8) #产生8个1~10之间的等间隔值
np.linspace(1,10,8,endpoint=False) #不包含最后一个间隔值

4.1 NumPy数组与标量之间的运算

定义两个矩阵:

data1 = np.arange(1,13).reshape((3,4))
data1
data2 = np.arange(13,25).reshape((3,4))
data2

矩阵元素相乘(可做加、减、乘、除、取模等运算)

data1*data2

矩阵元素求倒数

1/data2

4.2 NumPy基本索引与切片

选取数据子集或单个元素

arr3 = np.arange(20)
arr3[3:5] = 20
arr3
切片自动传播

原理:将切片赋给一个变量时,给的是一个映射视图,实际上变量与原数据是挂钩的,映射数据改变时,原数据发生同步改变。(深拷贝和浅拷贝)

cellData = arr3[5:11]
cellData[:] = 333
cellData
**输出:
array([333, 333, 333, 333, 333, 333])
arr3
**输出:
array([  0,   1,   2,  20,  20, 333, 333, 333, 333, 333, 333,  11,  12,
        13,  14,  15,  16,  17,  18,  19])

可以看见,arr3对应位置的数值发生了改变
copy() 拷贝

arr4 = np.arange(20)
arr4
copyData = arr4[4:11].copy()
copyData[:] = 333
copyData
**输出:
array([333, 333, 333, 333, 333, 333, 333])
arr4
**输出:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])

4.3 改变数组维度

  • ravel() 展平成一维数组,返回数组的一个视图(原数据会改变)
  • flatten() 展平成一维数组,请求分配内存来保存结果(元素据不改变)
  • shape() 用元组设置维度
  • tarnsope() 矩阵转置
  • resize() 更改维度
举例1:矩阵转置
tdata = np.arange(1,21).reshape((4,5))
tdata.transpose()
tdata.T #矩阵转置,功能同上
举例2:更改矩阵维度
tdata.resize((2,10))
tdata
**输出:
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
tdata.shape = (4,5)
tdata
**输出:
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])

4.4 更多索引

  • 切片索引 可以在一个或多个维度上切片
  • 布尔值索引 由布尔值数组作为索引
  • 花式索引 用整数数组进行索引
举例1:二维数组切片索引
import numpy as np
arr2d = np.arange(1,25,2).reshape((3,4))
arr2d
arr2d[1,2:]
arr2d[2,1]
arr2d[2,:1]
arr2d[:,1]
arr2d[:2,1:3]
arr2d[:,1::2]  
举例2:布尔值索引

默认线性:纵向
HTML中的左右表格合并:列合并 上下表格合并:行合并

moni_citys = np.array(['SH','BJ','CQ','SH','BJ','BJ','CQ'])
moni_citys
moni_data = np.random.randn(7,8)*2 #正态分布高斯样本值
moni_data
moni_citys == 'BJ' #关系运算,返回bool类型
moni_data[moni_citys == 'BJ']
moni_data[moni_citys == 'BJ',2:]

做逻辑运算:

moni_citys != 'BJ'
moni_citys > 'BJ'
moni_data >= 2.5
moni_data[moni_data < 2.5] = 0
moni_data
moni_data[moni_data > 3] = 2
moni_data

类似数据库查询推断 where stu_id == ‘’ 后台程序筛选:读取stu_id,从上往下走,如果判断成立,true,保留;如果判断不成立,false,忽略。

举例3:花式索引
data = np.arange(100).reshape((10,10))
data[[3,0,4,2]]
data[[3,0,4,2],[5,7,6,1]]
data[[3,0,4,2]][:,[5,7,6,1]] # :找出的行都保留  ,列按照要求排列

5 NumPy数组对象的相关操作

5.1 数组组合

NumPy数组有:水平组合、垂直组合、深度组合

  • vstackd() 垂直组合
  • stack() 兼容多种组合
  • hstack() 水平组合
  • row_stack()
  • column_stack()
  • concatenate()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值