前言
作为数据分析三巨头Pandas、matplotlib、NumPy之一,必然要给足面子单独拿出来讲解一波。NumPy应用场景十分宽泛,Pandas很多函数转换后也都是NumPy数组类型的数据结构。在机器学习、深度学习以及一些数据处理操作中使用的频率甚至比Pandas都高。而且NumPy功能强大,使用起来也十分便捷,支持多种复杂操作。平时我的Pandas以及一些机器学习的文章都有用到NumPy,但是博客内容并没有详细解答NumPy的操作也没有记录有关NumPy操作的一些具体函数解答。对于我这种追求一站式服务需求的博主来说着实有点不妥,故把旧坑补上,出一期全新的一文速学系列-Numpy数据分析基础专栏。
此系列文章将被纳入我的专栏一文速学系列-NumPy数据分析基础,基本覆盖到使用NumPy数据分析日常业务以及常规的数学建模分析以及复杂操作方方面面的问题。从基础的数组操作逐步入门到处理矩阵矢量特征等复杂操作,以及专业的NumPy常用函数讲解,我都将花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发、数学建模、Python工程的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。
本章节主要详解关于numpy数组对象ndarray的基础数学运算操作,例如加减乘除的矩阵数组运算法则,以及通用常用的数学函数。
一、基础数学运算
数组上的算术运算符以元素为单位进行,将创建一个新数组并用结果填充。
1.加减
a = np.array([20, 30, 40, 50])
b = np.arange(10,50,10)
c=a-b
c
2.乘方
a**2
3.条件筛选
a<40
与许多矩阵语言不同,乘积运算符*在NumPy数组中操作元素。矩阵乘积可以使用@运算符(在python版本>=3.5)或点函数或方法执行:
4.矩阵元素相乘
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
A*B
5.矩阵乘法
A@B
或者使用dot函数也是一样的:
A.dot(B)
某些操作(如+=和*=)用于修改现有数组,而不是创建新数组。
a = np.ones((2, 3), dtype=int)
a*=3
a
a = np.ones((2, 3), dtype=int)
b = np.zeros((2, 3), dtype=int)
b += a
b
6.数组类型隐式转换
当使用不同类型的数组操作时,生成的数组的类型对应于更一般或更精确的类型(一种称为upcasting的行为)。
a = np.ones((2, 3), dtype=int)
b = np.zeros((2, 3), dtype=float)
c=a+b
c.dtype.name
许多一元操作,例如计算数组中所有元素的总和,都是作为ndarray类的方法实现的。
c.sum()
c.max()
c.min()
默认情况下,这些操作应用于数组,就好像它是一个数字列表,而不管其形状如何。但是,通过指定axis参数,可以沿数组的指定轴应用操作:
b = np.arange(12).reshape(3, 4)
b
b.sum(axis=0)
b.min(axis=1)
b.cumsum(axis=1)
二、切片索引和迭代
1.一维数组
一维数组可以被索引、切片和迭代,就像列表和其他Python序列一样。
a=np.arange(10,20,2)
a[2]
a[2:5]
2.多维数组
多维数组的每个轴可以有一个索引。这些索引以逗号分隔的元组形式给出:
def f(x, y):
return 10 * x + y
b = np.fromfunction(f, (5, 4), dtype=int)
b
b[2, 3]
b[0:5, 1]
b[1:3, :]
当提供的索引少于轴数时,缺失的索引被视为完整的切片:
b[-1]
b[i]中括号内的表达式被视为i,后跟表示其余轴所需的:的尽可能多的实例。NumPy还允许使用**b[i,…]**这样的圆点来写。
点(…)表示生成完整索引元组所需的任意冒号。例如,如果x是一个具有5个轴的数组,则
- x[1,2,…]等价于x[1,2,:,:,]
- x[…,3]到x[:,:,::,:3]
- x[4,…,5,:]到x[4、:、:、5、:]
c = np.array([[[ 0, 1, 2],
[ 10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
c
c[1, ...]
c[..., 2]
针对第一个轴对多维数组进行迭代:
for row in b:
print(row)
但是,如果要对数组中的每个元素执行操作,可以使用flat属性,它是数组所有元素的迭代器:
for element in b.flat:
print(element)
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见
版权归原作者 fanstuck 所有, 如有侵权,请联系我们删除。