NumPy简介
NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
基础知识
NumPy的数组类被调用ndarray。它也被别名所知 array。请注意,numpy.array这与标准Python库类不同array.array,后者只处理一维数组并提供较少的功能。ndarray对象更重要的属性是:
ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
ndarray.shape - 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
ndarray.dtype - 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
ndarray.itemsize - 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。
ndarray.data - 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。
#一个例子
import numpy as np
a = [[0,1, 2], [3 ,4 ,5], [6, 7 ,8]]
a=np.asarray(a)
print(a.ndim,a.shape,a.size,a.dtype,a.itemsize,a.data )
#output 2 (3, 3) 9 int32 4
ndarray数组的创建
np.arange(n) ; 元素从0到n-1的ndarray类型
np.ones(shape): 生成全1
np.zeros((shape), ddtype = np.int32) : 生成int32型的全0
np.full(shape, val): 生成全为val
np.eye(n) : 生成单位矩阵
np.ones_like(a) : 按数组a的形状生成全1的数组
np.zeros_like(a): 同理
np.full_like (a, val) : 同理
np.linspace(1,10,4): 根据起止数据等间距地生成数组
np.linspace(1,10,4, endpoint = False):endpoint 表示10是否作为生成的元素
np.concatenate():
ndarray数组的维度变换
.reshape(shape) : 不改变当前数组,依shape生成
a=np.array(range(9)).reshape(3,3)#生成3*3数组
.resize(shape) : 改变当前数组,依shape生成
.swapaxes(ax1, ax2) : 将两个维度调换
.flatten() : 对数组进行降维,返回折叠后的一位数组
数组的类型变换
数据类型的转换 :a.astype(new_type) : eg, a.astype (np.float)
数组向列表的转换: a.tolist()
数组的索引和切片
一维数组切片
a = np.array ([9, 8, 7, 6, 5, ])
a[1:4:2] –> array([8, 6]) : a[起始编号:终止编号(不含): 步长]
多维数组索引
a = np.arange(24).reshape((2, 3, 4))
a[1, 2, 3] 表示 3个维度上的编号, 各个维度的编号用逗号分隔
多维数组切片
a [:,:,::2 ] 缺省时,表示从第0个元素开始,到最后一个元素
数组的运算
np.abs(a) np.fabs(a) : 取各元素的绝对值
np.sqrt(a) : 计算各元素的平方根
np.square(a): 计算各元素的平方
np.log(a) np.log10(a) np.log2(a) : 计算各元素的自然对数、10、2为底的对数
np.ceil(a) np.floor(a) : 计算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整)
np.rint(a) : 各元素 四舍五入
np.modf(a) : 将数组各元素的小数和整数部分以两个独立数组形式返回
np.exp(a) : 计算各元素的指数值
np.sign(a) : 计算各元素的符号值 1(+),0,-1(-)
.
np.maximum(a, b) np.fmax() : 比较(或者计算)元素级的最大值
np.minimum(a, b) np.fmin() : 取最小值
np.mod(a, b) : 元素级的模运算
np.copysign(a, b) : 将b中各元素的符号赋值给数组a的对应元素
numpy随机数函数
简介numpy 的random子库
rand(d0, d1, …,dn) : 各元素是[0, 1)的浮点数,服从
均匀分布
randn(d0, d1, …,dn):标准
正态分布
data=np.random.rand(10)
data1=np.random.randn(10)
“”[0.03204083 0.27937194 0.
69090113 0.26315503 0.48795894 0.28773118
0.44494569 0.52262717 0.04793805 0.91971475]
[ 0.78044614 -1.63095456 -0.88627282 0.40722248 0.25078519 -0.72235564
0.81553023 0.79439466 0.0347481 1.04211688]
“”
randint(low, high,( shape)): 依shape创建随机整数或整数数组,范围是[ low, high)
data=np.random.randint(1,36,6)
"""[27 33 19 6 13 30]
"""
seed(s) : 随机数种子
shuffle(list) : 根据数组a的第一轴进行随机排列,改变数组list元素的顺序
import random
list = [20, 16, 10, 5]
data=random.shuffle(list)
#[5, 20, 10, 16]
choice(a) : 返回随机项
import random
list = [20, 16, 10, 5]
data=random.choice(list)
#16
uniform() 方法将随机生成下一个实数,它在 [x, y] 范围内
import random
list = [20, 16, 10, 5]
data=random.uniform(1,10)
#3.644723336854002
seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。
randrange() 方法返回指定递增基数集合中的一个随机数,基数默认值为1。
import random
data=random.randrange (10, 100 ,5)
print(data)
#65
numpy的统计函数
sum(a, axis = None) : 依给定轴axis计算数组a相关元素之和,axis为整数或者元组
mean(a, axis = None) : 同理,计算平均值
average(a, axis =None, weights=None) : 依给定轴axis计算数组a相关元素的加权平均值
std(a, axis = None) :同理,计算标准差
var(a, axis = None): 计算方差
eg: np.mean(a, axis =1) : 对数组a的第二维度的数据进行求平均
a = np.arange(15).reshape(3, 5)
np.average(a, axis =0, weights =[10, 5, 1]) : 对a第一各维度加权求平均,weights中为权重,注意要和a的第一维匹配
min(a) max(a) : 计算数组a的最小值和最大值
argmin(a) argmax(a) : 计算数组a的最小、最大值的下标(注:是一维的下标)
unravel_index(index, shape) : 根据shape将一维下标index转成多维下标
ptp(a) : 计算数组a最大值和最小值的差
median(a) : 计算数组a中元素的中位数(中值)
eg:a = [[15, 14, 13],
[12, 11, 10] ]
np.argmax(a) –> 0
np.unravel_index( np.argmax(a), a.shape) –> (0,0)