Python和Numpy

简介:

NumPyNumerical Python Extensions)是一个第三方的开源Python包,用于科学计算,其前身是1995年开始开发的基于一个用于数组运算的库,经过长时间的发展,基本上成了绝大多数Python科学计算的基础包。

NumPy主要操作的对象是同种类型元素的多维数组/矩阵,并提供大量科学计算,尤其是线性代数,简单数学,逻辑,排序,选择,I/O,傅立叶变换,基本统计,随机模拟;而标准Python库中的array.array只提供少量功能。

   

网如下简洁介绍:

  • 强大的N维数组对象及处理

  • sophisticated (broadcasting) functions 强大的函数功能,broadcasting?

  • 与C++与Fortran集成

  • 线性代数、傅立叶转换和随机数生成函数

NumPy提供了两种基本的对象,ndarray(N-dimensional array object)和ufunc(universal function object)可以对其N维数组进行计算处理.


基础结构

多维数组ndarray

NumPy的主要对象是同质多维数组,矩阵。所为同质即其所有元素的类型都相同。其中维度称作轴axes,轴的数目称为秩rank

ndarray.ndim:数组维度的数量,rank , 如2维数组的rank = 2;

ndarry.shape :  数组的维度,对于n行m列的矩阵,shape则是(n,m), 所以shape元组的长度即是rank

ndarry.size:多维数组总个数,如2*3矩阵size=6


内存结构

多维数组的内存结构分为两大对象,一块用来保存数据区域,一块用来描述元数据类型的dtype

640?wx_fmt=jpeg

多维数组创建

直接从标准数组创建:

b=np.array( [(1,2),(3,4)])

创建复数类型:

640?wx_fmt=jpeg

zeros:创建全部由0组成的数组

ones:则创建一个由1组成的数组

empty:随机由内存中数据生成

arange:安装指定规则生成

linspace:浮点数生成数组

640?wx_fmt=jpeg

简单方便,最后linspace则是针对浮点数,参数则是希望得到的元素个数,而非arange中的步长作为参数。


函数及操作

数组/矩阵基本操作

对于数组元素级别的操作:

640?wx_fmt=jpeg

包括数组元素的相减,自己元素*2,或者平方,或者进行判断操作。


同样对于,多维数组/矩阵也同样适用:

640?wx_fmt=jpeg

对于矩阵的简单基本操作我们已经可以看出NumPy的灵活方便。


对于我们关心的矩阵乘法,则需要使用函数dot

640?wx_fmt=jpeg

如上,a*b只是简单的对应元素相乘,dot则是真正矩阵乘法。另外,多维数组也支持子操作,如a *= 2;

其他通用函数

其他通用函数同样可以作用于多维数组/矩阵,如sin,cos,exp,average,cov,ceil, transpose等


all: 测试是否True

640?wx_fmt=jpeg

类似C语言风格,非零即True


soft用指定算法对数组进行排序,算法包括了quicksort, mergesort, heapsort等,默认快排序,对于排序算法的性能,参考如下:

640?wx_fmt=jpeg

总体来说,做到了简单,灵活。

640?wx_fmt=jpeg

sort甚至可以对结构化数组进行排序:

640?wx_fmt=jpeg

简直方便到让人流口水。。。


transpose矩阵转置

640?wx_fmt=jpeg


高阶功能

Broadcasting

Numpy中引入的广播broadcasting用来解决两个形状不同的矩阵阵列如何进行扩展从而可以继续进行数学计算的机制。简单来说,较小的阵列“广播”扩展到较大的阵列相同的形状维度,使得它们可以对等进行输血计算,广播提供过了一种向量化的操作方式,并且Python的广播不需要数据复制,执行效率高效。


具体的广播规则则是让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐:

640?wx_fmt=jpeg

同样,在矩阵乘法中:

640?wx_fmt=jpeg


傅立叶变换/分析

傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数或者它们的积分的线性组合,在各个学科中有广泛的应用。


Numpy中包含了标准FFT(一维,一维离散,两维,N维度等),实际FFT等等。这里自动过滤。


下面看一个官网的一维离散傅立叶变换

640?wx_fmt=jpeg

运行生成的图像为:

640?wx_fmt=jpeg

简单财务函数

Numpy提供了一些简单的金融财务的函数,如计算现值pv,终值fv,贷款利息,收益率等比较基本功能,可以自行查阅API文档。

线性代数

这个应该作为多维数组/矩阵框架的基本款吧?

640?wx_fmt=jpeg

还有其他计算特征值,范数,行列式,以及求解矩阵方程式或线性标量方程组,最小二乘法,求逆等。


我们来看一下我们感兴趣的最小二乘法吧:

lstsq:求解最小二乘解返回到线性矩阵方程


如 求适合直线,y = mx + c

x = [0,     1,    2,    3]

y = [-1, 0.2, 0.9, 2.1]

640?wx_fmt=jpeg

并且可以用简单代码生成拟合图像:

640?wx_fmt=jpeg

运行后,生成如下拟合图:

640?wx_fmt=jpeg


统计/随机抽样

统计与随机分布也是必不可少的函数,包含了随机数据random, sample; 分布beta, binomial, 指数分布,正态分布,泊松分布等等几十种,统计函数如标准方差std,协方差等等。


当然,我们也重点看看我们感(neng)兴(kan)趣(dong)的正态/高斯分布吧:


random.normal(loc, scale, size): 高斯分布绘制随机样本


请自行查阅维基百科:http://en.wikipedia.org/wiki/Normal_distribution


我们来看一下吧:

640?wx_fmt=jpeg

生成的图形如下:

640?wx_fmt=jpeg
目录
相关文章
|
22天前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
34 1
|
13天前
|
SQL 并行计算 API
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
|
15天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
【7月更文挑战第12天】Python的Pandas和NumPy库助力高效数据处理。Pandas用于数据清洗,如填充缺失值和转换类型;NumPy则擅长数组运算,如元素级加法和矩阵乘法。结合两者,可做复杂数据分析和特征工程,如产品平均销售额计算及销售额标准化。Pandas的时间序列功能,如移动平均计算,进一步增强分析能力。掌握这两者高级技巧,能提升数据分析质量和效率。
25 4
|
22天前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
33 3
|
8天前
|
数据采集 数据可视化 数据挖掘
数据分析入门:用Python和Numpy探索音乐流行趋势
数据分析入门:用Python和Numpy探索音乐流行趋势
|
13天前
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
15 0
|
1月前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
44 5
|
15天前
|
数据挖掘 数据处理 决策智能
Python 数据分析工具箱:深挖 Pandas 与 NumPy 高级功能,驱动智能决策
【7月更文挑战第12天】Python的Pandas和NumPy是数据分析的基石。Pandas提供灵活的数据结构如DataFrame,用于高效处理关系型数据,而NumPy则以多维数组和科学计算功能著称。两者结合,支持数据合并(如`pd.merge`)、时间序列分析(`pd.to_datetime`)和高级数组运算。通过掌握它们的高级特性,能提升数据分析效率,应用于各领域,如金融风险评估、市场分析和医疗预测,助力数据驱动的决策。学习和熟练运用Pandas与NumPy是成为出色数据分析师的关键。
|
1月前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
30 2
|
22天前
|
数据采集 数据挖掘 大数据
Pandas是Python数据分析的核心库,基于NumPy,提供DataFrame结构处理结构化数据
【7月更文挑战第5天】Pandas是Python数据分析的核心库,基于NumPy,提供DataFrame结构处理结构化数据。它支持缺失值处理(dropna()、fillna())、异常值检测(Z-Score、IQR法)和重复值管理(duplicated()、drop_duplicates())。此外,数据转换包括类型转换(astype())、数据标准化(Min-Max、Z-Score)以及类别编码(get_dummies())。这些功能使得Pandas成为大数据预处理的强大工具。