Python科学计算:Numpy学习

文章介绍了Numpy的基本操作,包括数组的初始化、算术运算,特别是向量的加减乘除以及自加运算。讨论了向量运算的效率,如a+=c比a=a+c更快的原因,并提到了Numpy的广播机制在不同尺寸数组运算中的作用。此外,还提及了通用函数如np.fix和逻辑运算的应用,以及如何使用np.select和piecewise函数进行复杂条件的计算。
摘要由CSDN通过智能技术生成

昨天看完了Numpy的安装、数组的初始化等操作,先复盘一下,昨天学的命令有#:

#导入
import numpy as np
#查看文档
help(np.lookfor)
#初始化构造:两种,一种是从零开始构造,另一种是相似对象构造
np.linspace
np.arrange
np.zeros
np.array
np.sin
np.cos
np.empty_like
np.hstack
#构造函数好多的查看文档自己慢慢学吧

好了,复盘了昨天的学习内容之后,开始今天的学习:

向量的算术运算:相同大小的向量之间是可以就行运算的:

可以是+,-,*,/这些运算,挺简单的,再试一个:

也可以用自加,a+=c的那种,书上说,这样因为是避免了创建临时数组,速度会比a=a+c更快,

???为啥我的会出错???

不是,这,我不理解啊,为啥书上的就可以,我的就不行,莫非是因为,书里用的IPython,而我用的是Pycharm?

那,那再试试其他的

但是,这下,你可以看到,第三个a/5,它变成了dtype=float的数组,numpy可以很有效的讲第一个或者第四个print中的2转换成一个数组:

c=2*np.ones_like(a)

按要求进行元素间的计算就欧克了,广播机制我还没学到,先吃饭去,吃完饭再说

对于大型的数组,向量化的执行速是飞创快的,内部都是用的是预编译的c语言,numpy数组的切片始终是指向原始数组的。

通用函数的话,numpy内置了很多的通用函数,我们可以通过

help(numpy.fix)

这样的方式来调用,在numpy中,直接除以0是会报错的,但是,如果是简洁的除以 0,则hi爆出一个warn和一个带有inf的数组:

正无穷大是np.inf,负无穷大是np.NINF,

向量的逻辑运算:

看到,y是一个bool型数组,这个bool型数组中,False刚好就对应着x中x[i]>0的元素的数量,

可以在赋值语句的一侧或者两侧使用逻辑数组来作为我们的切片定义,这就很简单的解决了c++for循环中所出现的问题,跟着书上的来写一个:计算

为什么不直接对x进行如上的处理嘞?很简单,x可能在其他地方是有用的,如果我们直接改了x,后面有要用到x时,就只能重新生成一个x,这就会造成空间的浪费,还不如造一个z。

要构造复杂函数的时候,numpy给我们给了一个通用函数select,这个函数可以用来封装一定数量的选项:

import numpy as np
result=np.select([C0,C1,C2],[R0,R1,R2],default=0)

举个例子:

这两种方法是相同的实现结果,其实,select函数是有些浪费的,因为它涉及到我们必须事先计算所有可能的结果,这会造成性能问题,Numpy实际上是提供了piecewise分段函数的方法滴,

当然,你要是不想写这么多行代码的话,可以试着用匿名函数来做:

广播,广播有两个法则:

  1. 如果多个数组的维度不同,那么我们会使用数字“1”来扩展维度较少的数组的维度,一直到轴的数量相同

  1. 确保包含大小为1的唯独或者轴的数组与最大维度的数组在该维度上大小相同,就是说小的数组被广播了,被广播的数组在该维度上的值相同

说实话,第二条我着实没有理解那是个啥意思,跟着书上的讲解来敲一敲:

哦,就是数组的长度在不改变运算结果的前提下增加了,但是注意:x*r=r*x,这和矩阵乘法不一样,numpy对矩阵的运算有着自己的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值