- ndarray的优势—为什么快?
- 存储空间连续,访问速度快
- 可以并行执行-Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。
- numpy基于矩阵,矩阵可以分块计算,所以可以实现并行
- ndarray的属性
- Shape—形状—注意:返回的是元组
- ndim—维度的个数—就是shape的长度
- size—元素个数=shape的各个值想乘
- dtype—元素的类型
- ndarray的形状
生成数组的方法
-
生成0和1的数组
- np.ones(shape)
- np.ones_like(array)—根据给定数组生成一个形状一样的数组
- np.zeros
- np.zeros_like
-
从现有数组生成
- np.array--深拷贝
- np.asarray--浅拷贝
-
生成固定范围的数组
- np.linspace—start,stop,num 在star到stop之间等区间的选取num个数,注意:一定可以去到stop
- np.arange(start,stop,step) 以start未开始,每隔step取一个值 stop肯定取不到(左闭右开) 等于python的range
- np.logspace(start,stop,num) 以10为低的指数值,等比
-
生成随机数组
- 均匀分布
- np.random.rand—0-1之间均匀分布随机数
- np.random.uniform(low,high,size)—指定最小值和最大值
从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
- 正态分布
- np.random.randn—默认均值为0 方差1
- np.random.normal(mean,std,size)
- 两个参数:均值 方差
- 均值——决定的分布的位置
- 方差——决定图像的胖瘦
- 方差大—分布越散,图像越矮胖
- 方差小—分布越稠密,图像越高瘦
- 均匀分布
-
数组的索引、切片[掌握]
- 注意每个轴的下标
# 三维,一维
a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])
# 返回结果
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[12, 3, 34],
[ 5, 6, 7]]])
# 索引、切片
>>> a1[0, 0, 1] # 输出: 2
-
形状修改[掌握]
- 对象.reshape—返回新的数组
- 对象.resize---直接修改原数组
- 对象.T
-
类型修改[知道]
- 数组对象.astype(指定类型)
- 数组对象.tostring() tobytes()
-
数组的去重[知道]
- np.unique(数组) —#返回的是一维数组
temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
>>> np.unique(temp)
array([1, 2, 3, 4, 5, 6])
ndarray运算[重点]
逻辑运算
- arr>0.5 ——得到的是一个布尔数组,shape跟arr一样
- arr[arr>0.5]—访问到满足条件的元素,并可以对其进行赋值操作 arr[arr>0.5]=1
通用判断函数
- np.all(arr)#全部是True才是True
- np.any(arr)#全部是False才是False
- 用法:结合逻辑运算一起进行
- np.all(data>0.5)判断是不是全部>0.5
- np.any(data>0.5)判断是不是至少一个>0.5
np.where(三元运算符)
-
np.where(data>0.5,1,0)
-
np.logical_and---np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
-
np.logical_or
统计运算
- np.sum np.min np.max np.median np.mean np.var np.std ——都是将一组值变成一个值
- axis 代表的就是你要沿着那个轴进行统计
在数据挖掘/机器学习领域,统计指标的值也是我们分析问题的一种方式。常用的指标如下:
min(a[, axis, out, keepdims])
Return the minimum of an array or minimum along an axis.
max(a[, axis, out, keepdims])
Return the maximum of an array or maximum along an axis.
median(a[, axis, out, overwrite_input, keepdims])
Compute the median along the specified axis.
mean(a[, axis, dtype, out, keepdims])
Compute the arithmetic mean along the specified axis.
std(a[, axis, dtype, out, ddof, keepdims])
Compute the standard deviation along the specified axis.
var(a[, axis, dtype, out, ddof, keepdims])
Compute the variance along the specified axis.
数学:矩阵
矩阵和向量
- 矩阵
有行有列 - 向量—看成只有1列的矩阵----一定是列向量
加法和标量乘法
- 加法---两个矩阵对应元素相加
- 标量乘法 —标量×矩阵中每一个元素
矩阵乘法
- 左矩阵×右矩阵——注意:左矩阵列数=右矩阵行数
矩阵乘法的性质
- 不满足交换律
- 满足结合律
- 单位矩阵一定是方阵—对角线元素值为1,其他位置为0
逆(了解)、转置
- 逆矩阵—等价于标量中的倒数
- 注意:矩阵有逆矩阵的前提是方阵
- 转置--行列互换
广播(Broadcast)
https://www.runoob.com/numpy/numpy-broadcast.html
矩阵运算
- np.matmul(A,B)—实现矩阵A × 矩阵B
- np.dot(A,B)—跟前者一样 ---常用这个
- 不同点 dot支持标量乘法 matmul不支持