python numpy模块
Numpy
NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。
NumPy的主要功能:
ndarray,一个多维数组结构,高效且节省空间
无需循环对整组数据进行快速运算的数学函数
读写磁盘数据的工具以及用于操作内存映射文件的工具
线性代数、随机数生成和傅里叶变换功能
用于集成C、C++等代码的工具
安装方法:pip install numpy
引用方式:import numpy as np
创建ndarray:np.array()
应用场景:
例1:已知若干家跨国公司的市值(美元),将其换算为人民币
例2:已知购物车中每件商品的价格与商品件数,求总金额
ndarray还可以是多维数组,但元素类型必须相同
常用属性:
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
dtype:
bool_, int(8,16,32,64), uint(8,16,32,64), float(16,32,64)
类型转换:astype()
创建ndarray:
array() 将列表转换为数组,可选择显式指定dtype >>> np.array([1, 2, 3]) array([1, 2, 3]) arange() range的numpy版,支持浮点数 >>> np.arange(3.0) array([ 0., 1., 2.]) linspace() 类似arange(),第三个参数为数组长度 >>> np.linspace(2.0, 3.0, num=5) array([ 2. , 2.25, 2.5 , 2.75, 3. ]) zeros() 根据指定形状和dtype创建全0数组 >>> np.zeros((2, 1)) array([[ 0.], [ 0.]]) ones() 根据指定形状和dtype创建全1数组 np.ones((2, 1)) array([[ 1.], [ 1.]]) empty() 根据指定形状和dtype创建空数组(随机值) np.empty([2, 2], dtype=int) array([[-1073741821, -1067949133], [ 496041986, 19249760]]) #random eye() 根据指定边长和dtype创建单位矩阵 >>> np.eye(2, dtype=int) array([[1, 0], [0, 1]]) reshape() 分解,合并 >>> a = np.array([[1,2,3], [4,5,6]]) >>> np.reshape(a, 6) array([1, 2, 3, 4, 5, 6]) >>> np.reshape(a, (3,-1)) array([[1, 2], [3, 4], [5, 6]])
数组和标量之间的运算
a+1 a*3 1//a(整除) a**0.5
同样大小数组之间的运算
a+b a/b a**b
数组的索引
a[5] a2[2][3] a2[2,3] # 第几维数组的第几个索引,跟上面的写法得到结果一样 数组的切片 a[5:8] a[:3] = 1 # 切片的数组都赋值1 a2[1:2, :4] # 第二个数组,0到3的索引 a2[:,:1] # 所有数组,索引为0的值 a2[:,1] # 所有数组,索引为1的值 与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 b = a[:4] b[-1] = 250 【解决方法:copy()】# 这样b是一个新的内存地址 b = a[:4].copy() b[-1] = 250
布尔型索引
给一个数组,选出数组中所有大于5的数。
a[a>5]
原理:
a>5会对a中的每一个元素进行判断,返回一个布尔数组
布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组
给一个数组,选出数组中所有大于5的偶数。
a[(a>5) & (a%2==0)]
给一个数组,选出数组中所有大于5的数和偶数。
a[(a>5) | (a%2==0)]
花式索引
对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。
a[[1,3,4,6,7]]
对一个二维数组,选出其第一列和第三列,组成新的二维数组。
a[:,[1,3]]
通过用函数
一元函数:
abs #绝对值
sqrt #开方
ceil #向上取整
floor #向下取整
rint #四舍五入
trunc #ceil
modf #把小数整数分开
>>> np.modf([0, 3.5])
(array([ 0. , 0.5]), array([ 0., 3.]))
>>> np.modf(-0.5)
(-0.5, -0)
isnan
0/0 是nan
isinf
In [60]: a = np.arange(1,5) In [61]: b = np.arange(1,5) In [62]: b[-1]=0 In [63]: a/b C:\Python35\Scripts\ipython:1: RuntimeWarning: divide by zero encountered in tru e_divide Out[63]: array([ 1., 1., 1., inf]) In [64]: c=a/b C:\Python35\Scripts\ipython:1: RuntimeWarning: divide by zero encountered in tru e_divide # 结合布尔索引取值 In [65]: c[~np.isinf(c)] Out[65]: array([ 1., 1., 1.])
二元函数:
maximum
np.maximum(a,b) #得到这俩列表中有最大的数的元素
minimum #最小
数学和统计方法
sum 求和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引
np.random 随机数
rand 给定形状产生随机数组(0到1之间的数)
randint 给定形状产生随机整数
choice 给定形状产生随机选择
shuffle 与random.shuffle相同
uniform 给定形状产生随机数组