跳到主要内容Python 数据分析基础:NumPy 数组创建与操作详解 | 极客日志PythonAI算法
Python 数据分析基础:NumPy 数组创建与操作详解
本文详细介绍了 Python 中 NumPy 库的基础知识。内容涵盖 NumPy 模块的核心概念 ndarray,包括维度 ndim、形状 shape 和数据类型 dtype。文章演示了多种数组创建方法,如 np.array、np.arange、np.linspace 及 np.random 系列函数,并解释了 arange 与 linspace 的区别。此外,还讲解了数组属性的查看方式、基于 axis 的聚合运算,以及基础的索引与切片操作技巧。通过实例代码展示了如何构建和操作多维数组,为后续学习 Pandas 及数据科学分析打下坚实基础。
JavaCoder0 浏览 Python 数据分析基础:NumPy 数组创建与操作详解
前言
大名鼎鼎的 NumPy 库,其实是一个能够实现科学计算的 Python 模块。与其他不同的是,如果要存储数据,其储存在连续的内存块中,与其他的 Python 内置对象相独立。
同时,它使用 C 语言的算法库可以很轻松地对内存进行相应操作,没有其他的前期工作。NumPy 数组所使用的内存与其他的内置序列相比更少。
而且,其它 Python 重量级的相关套件(如 Pandas、SciPy、Scikit-learn 等等)都几乎是奠基在 NumPy 的基础上。
所以,学会 NumPy 才能为往后学习其他数据科学相关套件来分析影像组学打下坚实的基础。
那下面我们就一起来初窥一下这个 NumPy 到底是何方神圣吧!小编觉得,可以用一句话来总结 NumPy 的特点:要想 Python,先 NumPy;要想 NumPy,先阵列!所以从这句话中我们可以看到,NumPy 中最经典的就是数组操作。
实际上,NumPy 的所有功能都是建立在同质且多维度的 ndarray(N-dimensional array)上。
ndarray 有几个关键属性,分别为维度(ndim)、形状(shape)和数值类型(dtype)。一般我们称一维数组为 vector,而二维数组为 matrix。
1. 导入与创建数组
作为最开始的步骤,我们需要引入 numpy 模块,透过传入 list 到 numpy.array() 创建数组。
import numpy as np
np1 = np.array([1, 2, 3])
np2 = np.array([4, 5, 6])
所以,我们可以通过以下操作来明确一个数组的相关信息:
print(np1.ndim, np1.shape, np1.dtype)
相信聪明的大家到这里都没有任何问题。那么我们接下来再继续生成第三个数组:
np3 = np.array([1, 2, 3, 4, 5, 6])
接下来,如果我们想要改变数组的维度,比如从前面的一维变成二维可以这么做:
np3 = np3.reshape([2, 3])
print(np3.ndim, np3.shape, np3.dtype)
大家一定注意到了吧,上面都会显示一个 int64。那 int64 又是什么东西呢?
2. 数据类型(dtype)
说到这个,我们就要来讨论一下数组的类型,或者称为数据的类型。常用的主要有以下四种:bool、int、float、string。
- bool:也就是我们高中学过的布尔,可以包含 True、False。
- int:可以包含 int16、int32、int64。其中数字是指 bits。
- float:可以包含 16、32、64,表示小数点后精度。
- string:可以是 string、unicode。
而有时可能会出现 nan,则表示遗失值。那接下来,我们来一个前面的汇总。
import numpy as np
a = np.arange(15).reshape(3, 5)
a
print(a.shape)
print(a.ndim)
print(a.dtype.name)
print(a.itemsize)
print(a.size)
print(type(a))
(3, 5)
2
int64
8
15
<class 'numpy.ndarray'>
大家都看明白了吧?所以我们要掌握的第一步就是创建数组,使用 np.array() 将 Python list 换为 numpy array。
a = np.array([2, 3, 4])
print(a)
print(a.dtype)
b = np.array([1.2, 3.5, 5.1])
print(b.dtype)
除了人为的添加进去数组的内容,我们当然也可以通过函数的方式添加,比如下面两个函数:np.arange() 和 np.linspace()。
from numpy import pi
print(np.arange(10, 30, 5))
print(np.arange(0, 2, 0.3))
print(np.linspace(0, 2, 9))
[10 15 20 25]
[0. 0.3 0.6 0.9 1.2 1.5 1.8]
[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
arange() 类似于内置函数 range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。
linspace() 通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过 endpoint 参数指定是否包含终值,默认值为 True,即包含终值。这就是两者的差别。
np.random.rand():生成均匀分布的随机数。
np.random.randn():生成标准正态分布的随机数。
np.fromfunction():根据函数生成数组。
np.fromfile():从文件读取二进制数据。
这几个函数,这里我们重点展开一下 random 和 fromfunction 的使用:
print(np.random.rand(3, 3))
def f(x, y):
return 10 * x + y
b = np.fromfunction(f, (5, 4), dtype=int)
print(b)
[[ 0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]]
同时数组还能通过指定 axis 来查看各行各列的情况。axis=0 表示各行的总称(纵向聚合),axis=1 表示各列的总称(横向聚合)。比如:
b = np.arange(12).reshape(3, 4)
print(b)
print(b.sum(axis=0))
print(b.min(axis=1))
print(b.cumsum(axis=1))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[12 15 18 21]
[0 4 8]
[[ 0 1 3 6]
[ 4 9 15 22]
[ 8 17 27 38]]
大家要注意喔,Python 的行列计数是从 0 开始的哟!
3. 数组索引与切片
这么多种生成数组的方式。那有没有拆分数组呢?俗话说得好,分久必合,合久必分。有分就有合。这是万事万物的自然规律。所以我们再来看看如何切割以及索引数组。
a = np.arange(10)**3
print(a)
print(a[2])
print(a[2:5])
print(a[:6:2])
print(a[::-1])
[ 0 1 8 27 64 125 216 343 512 729]
8
[ 8 27 64]
[ 0 8 64]
[729 512 343 216 125 64 27 8 1 0]
大家看,第一行其实是制造 10 个从 0 开始的三次方的数字。而我们 print 第 2 个数,显然是 8。再接着,print 第 2 到 5 个数字,得到 8,27,64。所以关键的要点就在于,一定要明白,Python 计数是从第 0 个开始的喔!
print(b[2, 3])
print(b[0:5, 1])
print(b[:, 1])
print(b[1:3, :])
23
[ 1 11 21 31 41]
[ 1 11 21 31 41]
[[10 11 12 13]
[20 21 22 23]]
4. 总结与展望
今天我们掌握了 NumPy 的基本知识,包括数组的创建、属性查看、数据类型理解、常用生成函数(arange, linspace, random, fromfunction)以及核心的索引切片操作。
这些是进行数据处理和科学计算的基石。后续我们可以进一步学习广播机制(Broadcasting)、高级索引、视图与副本的区别,以及如何结合 Pandas 进行更复杂的数据分析。
如果你也对 Python 感兴趣,建议多动手敲代码,实践是掌握编程的最佳途径。
希望这篇教程能帮助你顺利打通 Python 数据分析的第一道大关!
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online