利用python进行数据分析(四)

学习笔记4

第四章:
NumPy基础:数组与向量化计算



前言

NumPy是python数值计算最为重要的基础包。
· ndarray,一种高效多维数组,提供基于数组的便捷算数操作以及灵活的广播功能。
· 对所有的数据进行快速的矩阵计算,而无需编写循环程序。
· 对硬盘中的数组数据进行读写的工具,并对内存映射文件进行操作。
· 线性代数、随机数生成以及傅里叶变换功能。
· 用于连接NumPy到C、C++和FORTRAN语言类库的C语言API。

对于大多数数据分析应用,主要关注内容为:
· 在数据处理、清洗、构造子集、过滤、变换以及其他计算中进行快速的向量化计算。
· 常见的数组算法,比如sort、unique以及set操作等。
· 高效的描述性统计和聚合/概述数据。
· 数据排列和相关性数据操作,例如对异构数据进行merge和join。
· 使用数组表达式来表明条件逻辑,代替if-elif-else 条件分支的循环。
· 分组数据的操作(聚合、变换以及函数式操作)


提示:以下是本篇文章正文内容,下面案例可供参考

一、多维数组对象

ndarray是python中的一个快速、灵活的大型数据集容器。

import numpy as np
data = np.random.randn(2, 3)
#两行三列随机数组

ndarray可以直接进行操作

data * 10
data + data

在这里插入图片描述
每一个数组都有一个shape属性,用来表示该数组每一个维度的数量;每一个数组都有一个dtype属性,用来表示数组的数据类型。

1.1生成ndarray

使用array函数可以接受任意的序列型对象,生成一个新的包含传递数据的numpy数组。

#列表的转化
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
#嵌套序列
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
#一次性创建全零数组
np.zeros(10)
#empty创建一个没有初始化数值的数组
np.empty((2, 3, 2))#有时候会返回未初始化的垃圾数值

1.2 ndarray 的数据类型

在这里插入图片描述

1.3 NumPy数组算术

任何在两个等尺寸数组之间的算数操作都应用了逐元素操作的方式。

arr = np.array([[1, 2, 3],[4, 5, 6]])
arr * arr
arr - arr
#带有标量的计算会将计算参数传递给数组的每一个元素
1 / arr
arr ** 0.5

在这里插入图片描述

1.4 基础索引与切片

数组的切片是原数组的视图,这意味着数据并不是被复制了,任何对于视图的修改都会反映到原数组上。

arr = np.arange(10)
print(arr)
arr[5:8] = 12
print(arr)
arr_list = arr[5:8]
print(arr_list)
arr_list[1] = 12345
print(arr)

在这里插入图片描述
Numpy 是被设计用于大量数据的,在使用的时候要是复制数据的话,是会造成内存问题的。

1.5 神奇索引

#第一个[]表示寻找的行数,第二个代表寻找的指定列
arr = np.arange(32).reshape((8, 4))
print(arr)
print(arr[[1, 5, 7, 2]][:,[0, 3,1, 2]])

在这里插入图片描述

1.6 数组转置和换轴

#数组的转置,行列互换。
arr = np.arange(15).reshape(3,5)
print(arr)
print(arr.T)
#计算矩阵内积
arr = np.random.randn(6, 3)
np.dot(arr.T, arr)
#置换轴
arr.transpose((1, 0, 2))
将原先的第二个轴变为第一个,原来的第一个轴变为第二个,最后一个轴没有变。
#swapaxes方法,返回的是数据的视图,没有对数据进行复制
arr.swapaxes(1, 2)

链接: link.

二 通用函数:快速的逐元素数组函数

通用函数:是一种在ndarray数据中逐元素操作的函数
在这里插入图片描述
在这里插入图片描述

三 使用数组进行面向数组编程

3.1 将条件逻辑作为数组操作

numpy.where是三元表达式, x if c else y = numpy.where(c, x, y)

3.2 数学和统计方法

# 平均值
arr.mean() // np.mean(arr) //意思相同
arr.sum()#和
arr.std()#标准差
arr.cumsum() # 累积函数,前面的值相加

#都可以自带一个参数 axis用来指定是行还是列 0 代表 行轴向(就是以列为基准)

3.3 布尔值数组的方法

any() 检查数组中是否含有True,all()检查是否每个值都是True

3.4 排序

np.sort()方法是返回已经排序好的数组拷贝,而不是对原数组按位置排序。

3.5 唯一值与其他集合逻辑

np.unique()是返回数组中唯一值排序后形成的数组
与sorted(set(names)) 相同
在这里插入图片描述

4 使用数组进行文件输入与输出

np.save和np.load是高效存取硬盘数据的两大工具函数。
np.savez_compressed(name,a = arr,b = arr)将数据存入到已经压缩的文件里

5 线性代数

NumPy的线性代数是矩阵的逐元素乘积,而不是矩阵的点乘积

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6,23],[-1,7],[8,9]])
print(x.dot(y))
# 1*6 + 2*(-1) + 3*8 = 28
# 1*23 + 2*7 + 3*9 = 64

在这里插入图片描述
在这里插入图片描述

6 总结

后面都是基于数组的风格下处理数据,这一章是过渡需要的。对函数需要理解记忆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zw弟弟Fw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值