numpy数组函数讲解(数组和矢量计算)

NumPy(Numerial Python) 是Python数值计算最重要的基础包。NumPy提供了通用的数值数据处理的计算基础,许多科学计算包也是由NumPy构成,它可以高效处理大数组的数据。这是因为:

NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。

NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。

NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。

NumPy的主要功能:

ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。

用于对整组数据进行快速运算的标准数学函数(无需编写循环)。

用于读写磁盘数据的工具以及用于操作内存映射文件的工具。

线性代数、随机数生成以及傅里叶变换功能。

用于集成由C、C 、Fortran等语言编写的代码的A C API。

对于大部分数据分析应用而言,最关注的功能主要集中在:

用于数据整理和清理、子集构造和过滤、转换等快速的矢量化数组运算

常用的数组算法,如排序、唯一化、集合运算等。

高效的描述统计和数据聚合/摘要运算。

用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。

将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)。

数据的分组运算(聚合、转换、函数应用等)。

1.NumPy的ndarray:多维数组对象

NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。你可以利用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

import numpy as np # 生成一个3*3的随机数组 data = np.random.randn(3,3) print(data)

然后进行数学计算:

print("data * 10 : \n" ) print(data * 10) print("data data: \n") print(data data)

第一个例子中,所有的元素都乘以10。第二个例子中,每个元素都与自身相加。

要注意的是:ndarray中的所有元素必须是相同类型,另外每个数组都有一个shape来表示各维度的大小,一个dtype表示数组的数据类型。

1.1 创建ndarray

创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:

data2 = [[1, 2, 3, 4], [5, 6, 7, 8]] data3 = np.array(data2) print(data3)

除np.array之外,还有一些函数也可以新建数组。比如,zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元组即可:

print(np.zeros(10)) print(np.ones(10))

arange是Python内置函数range的数组版

ndarray的数据类型

dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:

arr1 = np.array([1, 2, 3], dtype = np.float64) print(arr1) print(arr1.dtype)

NumPy数组的运算

NumPy可以在不编写循环的情况下就执行批量运算,大小相等的数组之间的算数运算可以应用到元素级。数组和标量的运算也会传播到各个元素。

print(arr1 * arr1) print(arr1 * 3)

数组的索引和切片

对于一维数组而言和列表的功能差不多。但要注意的是当你将一个标量值赋值给一个切片时,该值会自动传播到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。

arr2 = np.arange(10) print(arr2) arr3 = arr2[5:8] print(arr3) arr3[:] = 3 print(arr2)

数组的转置和轴对换

数组有一个特殊的T属性,可以方便的进行转置。

arr = np.arange(15).reshape((3, 5)) arr.T

对于高维数组,可以使用transpose方法,但要输入由轴编号组成的元组才能对这些轴进行转置。

我的公众号:数据小白学习笔记 ,分享数据学习笔记。

————————————————

numpy数组函数讲解(数组和矢量计算)(1)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页