
本文共 2696 字,大约阅读时间需要 8 分钟。
Python与Numpy入门课程
前言
Python是数据处理语言中广泛使用的工具之一,而Jupyter Notebook作为一个Data Science IDE,凭借其高效便捷的交互式工作环境,不仅适合数据分析,也是学习numpy的理想平台。
安装Jupyter Notebook
在终端中输入以下命令即可安装Jupyter Notebook:
pip install jupyter
启动Jupyter Notebook,可以在工作目录中输入jupyter notebook
,即可打开浏览器查看工作界面。对于工作目录的访问,你可以通过鼠标点击进入或在文件路径中输入cmd
然后回车。
安装numpy
安装numpy的命令是:
pip install numpy
一、numpy基础知识
1.1 Numpy的基本数组类型
numpy提供了多种扩展的数组类型,其中最常用的是ndarray
。以下是numpy和Python列表的主要区别:
- 计算效率:在N slave进行大规模数据计算时,numpy显著优于Python的list类型。
- 内存管理:Numpy的数组是基于C语言实现的,内存使用更高效。
当你明白numpy的优势后,astype
函数可以帮助你快速将数据类型转换。例如:
import numpy as npx = np.array([1.0, 2.0, 3.0])y = x.astype('int32')
通过查看nbytes
和dtype
参数,可以了解不同数据类型所需的内存大小。例如:
x = np.array([1, 2, 3, 4, 5], dtype=np.int64)
这里,dtype=np.int64
意味着每个数占用8个字节,总占用64个字节。
1.2 数组属性解析
numpy数组的属性包括flags
、shape
、strides
、ndim
、base
等。每个属性都提供了不同方面的信息,例如:
flags
:以布尔形式显示数组属性,如CONTIGUOUS
(数据块连续性)、OWNERWABLE
(数据可写性等)。shape
:表示数组的维度。strides
:表示每个维度内元素的步长。base
:表示数组继承自哪个ndarray
。
通过运行以下代码可以更直观地了解这些属性的含义:
import numpy as npx = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)print(x.flags)print(x.shape) # 输出:(2, 3)print(x.strides) # 输出:(2, 1)
1.3 数组与矩阵的生成
在实际应用中,生成满足需求的数组或矩阵非常重要。Numpy提供了多种函数来帮助生成:
np.zeros
:创建全零矩阵。np.ones
:创建全一矩阵。np.full
:创建指定值矩阵。
例如,生成一个二维全零矩阵:
y = np.zeros((3, 3))
与生成一维全零数组
z = np.zeros(5)
可以通过行或列的方式切换维度。
1.4 随机数组与矩阵
在实际分析中,随机数据往往是必不可少的。Numpy提供了丰富的随机数生成函数,可以根据需求选择合适的分布:
- 均匀分布:
np.random.rand(3)
- 正态分布:
np.random.normal(0, 1, 3)
这样生成的数组可以直接用于后续的数据分析或算法训练。
2. 数组操作
2.1 基本操作
Numpy数组的操作包括索引、切片和重塑。以下是一个简单的示例:
x = np.array([1, 2, 3], dtype=np.int8)x[0] = 10print(x) # 输出:[10 2 3]
如果对切片进行修改,原数组也会随之改变,这就体现了numpy数组的共享特性。
通过reshape
方法可以改变数组的形状。如果需要生成新的数据块,可以使用copy()
方法。
2.2 数据合并与分割
在高并发计算中,合并和分割是常见操作。Numpy提供了多种函数来实现:
np.vstack
和np.hstack
:用于二维数组的合并。np.split
:用于一维数组的分割。
例如,将两个一维数组合并为二维数组:
a = np.array([1, 2, 3])b = np.array([4, 5, 6])c = np.vstack((a, b))print(c.shape) # 输出:(2, 3)
需要注意的是,合并数据时需要确保原数组的维度一致。
2.3 数组与矩阵运算
Numpy的阵向量和矩阵运算功能非常强大,常用于机器学习和数据科学领域。以下是一个简单的矩阵乘法示例:
A = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])C = np.dot(A, B)print(C) # 输出:[[19 22] #[25 34]]
如果需要高效计算,可以利用numpy的优化。
2.4 操作统计
为了了解数据集的统计特性,可以通过以下方法计算最大值、最小值等:
max_value = np.max(arr)min_value = np.min(arr)mean_value = np.mean(arr)
对于二维数组,可以使用argmax
等函数获取差异最大值的位置:
print(np.argmax([[1, 2], [3, 4]]))
2.5 索引运算
在实际分析中,索引运算是必不可少的。Numpy提供了灵活的索引方式,如布尔索引:
arr = np.array([10, 2, 3, 5, 1])filtered = arr[2:3]print(filtered) # 输出:[3]
此外,伪索引运算通过args
来实现,可以直接获取数据索引位置,如:
print(arr[args])
2.6 Fancy Indexing
复杂索引对数据处理灵活性贡献很大。Numpy支持通过布尔数组或索引数组进行索引。在实际应用中,这对于数组的高效操作至关重要。
总结
- 生成随机数:在Python中可以直接使用
random.randint
生成随机数,但Numpy内置更高效的函数。 - 依赖关系:Numpy与SciPy等库兼容,为科学计算提供了强大的工具。
- 最佳实践:尽可能利用Numpy的向量化操作,减少Python循环,提高运行效率。
通过这些简单的示例和介绍,你应该已经对Numpy有了一个基本的认识。
发表评论
最新留言
关于作者
