《利用Python进行数据分析》-2 Numpy
2022-08-27 本文已影响0人
Yayamia
Numpy的特点:
- 基于ndarray
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)
ndarray
- N dimensions array, N维数组对象
-
ndarray是一个同构数据多维容器,也就是其中的所有元素都必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)
-
可以通过astype把数组从一个dtype转换成另一个dtype
- 数组 = Numpy数组 = ndarray
创建ndarray
-
最简单的方法就是使用array函数,它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组。
- 嵌套序列(比如一组登场列表组成的列表)将会被转换成一个多为数组
- 除非也别说明,np.array会尝试为新建的这个数组推断出一个较为合适的数据类型。数据类型保存在一个特殊的dtype对象中。
- 其他创建数组的方式:
①np.zeros()
创建时需要传入一个表示形状的元组
②np.arange()
:相当于range()
,不过返回的是数组而不是列表
Numpy数组的运算
- 特点:不用编写循环就可以对数组执行批量计算,即矢量化(vectorization)。大小相等的数组之间的任何运算都会将运算应用到元素级。
- 数组与标量的运算会将标量值传播到各个元素
- 大小相同的数组之间的比较会布尔值数组
Numpy数组的索引和切片
-
一维数组和list差不多,不同之处在于:数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接放映到源数组上。
- 如果你想要得到的是ndarray切片的一份副本而不是视图,需要明确进行复制操作,如
arr[6:9].copy()
-
多维数组的索引
-
多维数组的切片
-
布尔型索引
布尔型索引的长度必须跟被索引轴长度一致
~
操作符用来反转条件很好用
也可以使用布尔条件的组合
注意:python关键词and or在布尔型数组中无效,需要用& 与 |
设值-
花式索引(Fancy indexing)
注意:花式索引和切片不一样,它总是将数据复制到新的数组中
数组转置和轴对换
转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有Transpose的方法,还有一个特殊的T属性。
通用函数
即(ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器
1661572471(1).png
可以接受2个数组的称为二元ufunc,结果返回一个数组
将条件逻辑表述为数组运算
np.where
函数是三元表达式x if condition else y
的矢量化版本
np.where的第二个和第三个参数不必是数组,它们都可以是标量。在数据分析工作中,where常用于根据另一个数组而产生一个新的数组
Numpy的数学统计方法
arr.mean(1)是计算行的平均值;arr.mean(0)是计算列的平均值
在上面这些方法中,布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的TRUE值进行计数
另外还有两个方法any和all,它们对布尔型数组非常有用。any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True。
唯一化:np.unique()
一些集合运算: