Python数据分析篇--NumPy--进阶

简介: Python数据分析篇--NumPy--进阶

多维数组

1. 一维数组只有行,二维数组相比一维数组多了列这个维度,而三维数组则类似多个二维数组堆叠在一起,形如一个立方体。

二维数组的创建

1. 二维数组相当于单层的嵌套列表。并且我们可以将单层嵌套列表传入 np.array() 方法创建一个二维数组。


2. ones() 和 zeros() 方法同样也能快速创建元素全为 1 和 0 的二维数组。与之前的区别在于,创建二维数组要传入一个包含行和列信息的元组。


3. 更多维的数组的创建,只要传入嵌套层数更多的列表即可。

import numpy as np
 
list_1=[[1, 2], [3, 4]]
print(list_1)
# [[1, 2], [3, 4]]
 
list_2=np.array([[1, 2], [3, 4]])
print(list_2)
# [[1 2]
#  [3 4]]
import numpy as np
list_1=np.ones((3,4)) # 3行4列
print(list_1)
 
#[[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

多维数组的性质

1. ndim:多维数组的维度个数。例如:二维数组的 ndim 为 2;


2. shape:多维数组的形状。对于 m 行和 n 列的数组,它的 shape 将是 (m,n)。因此,shape 元组的长度(元素个数)就是 ndim 的值;


3. size:多维数组中所有元素的个数。shape 元组中每个元素的乘积就是 size 的值;


4. dtype:多维数组中元素的类型。    

data = np.array([[1, 2, 3], [4, 5, 6]])
 
print('ndim:', data.ndim)
print('shape:', data.shape)
print('size:', data.size)
print('dtype:', data.dtype)
 
# ndim: 2
# shape: (2, 3)
# size: 6
# dtype: int64

二维数组的加减乘除

1. 二维数组间的加减乘除和一维数组间的并无大致,也是对应位置的元素进行计算。


2. 维度一样的数组间可以进行计算的条件是形状(shape)一样,形状不一样的数组元素无法一一对应,因此无法计算,导致报错。


3. 广播原则:先补齐行轴,再往列轴方向进行复制。



二维数组的通用方法

1. 二维数组的通用方法和一维数组的通用方法的基本用法类似,只是多了一个维度的数据。


2. 二维数组不仅可以对所有数据进行计算,还可以针对某个维度上的数据进行计算。


3. 这里就要引入一个概念——轴(axis)。轴和维度的概念是类似的,一维数组有 1 个轴,二维数组有 2 个轴,三维数组有 3 个轴等等。


import numpy as np
data = np.array([[1, 2], [5, 3], [4, 6]])
 
# 不指定 axis
print(data.max())
# 输出:6
 
# axis=0
print(data.max(axis=0))
# 输出:[5 6]
 
# axis=1
print(data.max(axis=1))
# 输出:[2 5 6]

二维数组的索引和分片

1. 二维数组的索引和分片同样和一维数组类似,只是在行索引的基础上再加上列索引。


2. 形如 data[m,n],其中 data 是二维数组,m 是行索引或分片,n 是列索引或分片。


3. 如果省略第二个参数 n 的话表示获取所有列,data[0] 就表示获取整个第一行,相当于 data[0, :]。

data = np.array([[1, 2], [3, 4], [5, 6]])
 
print(data[0, 1])
# 2
 
print(data[:, 0])
# [1 3 5]
 
print(data[1:3])
# [[3 4]
#  [5 6]]

布尔索引

1. 布尔索引,顾名思义就是用布尔值作为索引去获取需要的元素。

2. and 改用 &,or 改用 |,not 改用 ~,并且每个条件要用括号括起来。

data = np.array([[1, 2], [3, 4], [5, 6]])
print(data[data > 3])
# 输出:[4 5 6]
 
# 大于 3 或者不小于 2(即大于等于 2)
print(data[(data > 3) | ~(data < 2)])
# 输出:[2 3 4 5 6]

实用方法

arange() 方法

1. numpy 中的 arange() 方法和 Python 中的 rang() 用法类似,不同之处在于 arange() 方法生成的是数组,而 rang() 方法生成的是 rang 类型的序列。

# 生成 1-9 的数组
print(np.arange(1, 10))
# 输出:[1 2 3 4 5 6 7 8 9]
 
# 生成 0-9 的数组
print(np.arange(10))
# 输出:[0 1 2 3 4 5 6 7 8 9]
 
# 生成 1-9 的数组,步长为 2
print(np.arange(1, 10, 2))
# 输出:[1 3 5 7 9]

随机方法

1. Python 中有 random 模块来生成随机数,numpy 针对多维数组也集成了 random 模块,并且更加方便好用。


2. 这里只介绍其中的 rand() 方法和 randint() 方法,更多方法大家可以在需要时查询使用。


3. numpy 中的 np.random.rand() 方法和 Python 中 random.rand() 方法类似,都是生成 [0,1) 之间的随机小数。


4. 不同的是,numpy 中的  np.random.rand() 方法可以生成多个 [0,1) 之间的随机小数,只需我们传入要生成的随机数组的形状(shape)即可。


5. 同理,numpy 中的 np.random.randint() 方法和 Python 中的 random.randint() 类似.


6. 不同之处在于,random.randint() 生成的是 [m,n] 之间的整数,而 np.random.randint() 生成的是 [m,n) 之间的整数。

# 不传参数时
print(np.random.rand())
# 输出:0.1392571183916036
 
# 传入一个参数时
print(np.random.rand(3))
# 输出:[0.7987698  0.52115291 0.70452156]
 
# 传入多个参数时
print(np.random.rand(2, 3))
# 输出:
# [[0.08539006 0.97878203 0.23976172]
#  [0.34301963 0.48388704 0.63304024]]
# 不传入形状时
print(np.random.randint(0, 5))
# 输出:3
 
# 形状为一维数组时
print(np.random.randint(0, 5, 3))
# 输出:[4 0 1]
 
# 形状为二维数组时
print(np.random.randint(0, 5, (2, 3)))
# 输出:
# [[0 2 1]
#  [4 2 0]]

genfromtxt() 方法

1. genfromtxt() 方法用于文件的读取。


2. genfromtxt() 方法常用的参数有两个,分别是数据源和分隔符。


3. 第一个参数是数据源,可以是本地文件的路径,也可以是网络文件的地址。


4. 第二个delimiter 参数用于指定分隔符,CSV 文件一般是用逗号作为分隔符,当遇到其他符号分隔的文件时,用 delimiter 参数进行指定即可。


5. genfromtxt() 方法的返回值是一个多维数组。


import numpy as np
data=np.genfromtxt('data.csv',delimiter=',')
print(data)

致谢

 感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关文章
|
1月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
281 1
|
1月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
125 0
|
2月前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
158 3
|
4月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
547 0
|
25天前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
2月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
3月前
|
存储 数据挖掘 大数据
基于python大数据的用户行为数据分析系统
本系统基于Python大数据技术,深入研究用户行为数据分析,结合Pandas、NumPy等工具提升数据处理效率,利用B/S架构与MySQL数据库实现高效存储与访问。研究涵盖技术背景、学术与商业意义、国内外研究现状及PyCharm、Python语言等关键技术,助力企业精准营销与产品优化,具有广泛的应用前景与社会价值。
|
3月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
312 0
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析,别再死磕Excel了!
Python数据分析,别再死磕Excel了!
283 2

推荐镜像

更多