Python科学计算学习:1、Numpy

Numpy是python的一个包,因为python自己的列表,元组这些都没有和c++的数组那样好用,所以人家就开发了这么一个包,我也是这两天重新开始接触python(因为听书pycuda简单好用,所以想着从python出发来使用cuda解决问题),买了本黑皮书《Python科学计算》,从头开始重新学,所以,就先从Numpy开始学。

  1. Numpy的下载和安装:

  1. conda我没用过,不晓得怎么用conda去下载Numpy,但是,我找了一篇利用Conda下载python扩展库的教程,觉得讲的不错,如果有想使用conda,可以参考这篇文章:(1条消息) Anaconda下载及安装详细教程(图文)_anaconda下载安装教程_Yanir7的博客-CSDN博客

  1. 我用的比较简单的方法,pip直接下载:

pip install Numpy

如果你的pip下载过于缓慢,可以参考这篇文章,对pip进行换源,我现在用的是清华的源,感觉速度还是比较快的:(1条消息) Python pip换源所有方法_AI悦创|编程1v1的博客-CSDN博客

安装好之后,可以试着在cmd输入

pip show numpy

显示成这个样子就说明你的numpy已经安装好了,是可以正常使用的,

好了,前期准备工作结束之后,就可以开始使用Numpy了

使用也非常的简单:

import numpy as np #这个as np写不写是随你的,写了,就是后面调用numpy对象的时候,可以写成如np.array的形式,不写的话就是numpy.array,差别其实不大

好了,现在来照着书上的讲解先讲解一下numpy:它的基本对象是ndarray,是对象的数组,可以是多维的,内部的元素必须是相同的数据类型,而且,创建的数组对象在创建伊始就已经确定好了大小,是不能再被更改的,她可以提供接近编译语言的性能,是比较高效的(python是解释型语言,很慢,我常用的c++和之前学的fortran都是编译型语言,速度很快)。

哎,我之前不知道哎,原来numpy二维数组相乘这么简单:

import numpy
#c++:
for(int i=0;i<array.length;i++){
    for(int j=0;j<array.length;j++){
        c[i][j]=a[i][j]*b[i][j];
    }
}
#这是个O(x^2)级的运算
#numpy可以直接这样子搞:
c=a*b

这么简单的呀!!!

好了,言归正传,开始Numpy的学习:

  1. 一维数组(向量):这是数值计算的基本构造模块,有两种构造函数,一种是从零开始进行构建,另外一种是基于对另一个对象的相似来构造:

  1. 首先,第一种:np.linspace,用来构造均匀分布的浮点数(float)数组,调用格式也很简单:

a=np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None,axis=0)

在这里,a是一个长度为num=50的数组,他的第一个元素是start,即a[0]=strat,最后一个元素是stop,a[num-1]=stop,或者是a[-1]=stop(endpoint=True的时候),如果说是endpoint=False那么,step=(stop-start)/(num-1),最有一个元素是a[-1]=stop-step;那么通俗的理解就是,endpoint决定a是半开区间还是闭区间,retstep如果是true的话那么返回一个包含数组和step的元组举例试一下:

还有np.logspace,他和np.linspace差不多,就是人家数值是按对数刻度均匀分布的:

logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None,axis=0):

试一下吧:

哇,学到了学到了,

np.arange()也是一种,他和python自带的range差不多,但是,他返回的是一个数组:

呦呵,复数也是信手拈来啊,好得很好得很!

然后还可以构造全零的:np.zero(num,dtype=),这个就很简单了,你直接输出就发现,这是个全零的向量,更有np.array:举个书上的例子:

p_object是个任何可索引的容器对象,你可以放到,列表、元组、甚至是同类型另一个数组,他函数会自动的判断出p_object的类型,你可以用dtype去指定要转换的类型,自带的bool、float、complex,和你自己写的对象都可以,还是书上的两个例子:

行了,先写到这,晚上考自然辩证法,考完再学另一种构造方法

numpy的这个相似构造函数还挺有意思的:

你比如说,用np.sin(x)产生一个新的数组,这个数组的数值对应着前一张图片的x的正弦数值:

还有,创建一个和x大小一样的空数组:这就可以用np.empty_like(x),

这样可以看到的是,h数组内部是有数值的,虽然我们创建的是一个空数组,但是numpy还是为这个数组添加了值,这是因为,他不能真正的做到物理上的空,哈哈哈,其实也可以用zero_like来做,这样的话,输出的就是和x同样大小的全零数组,然后,我们竟然可以用np.hstack(x,y,z)的方式给他们结合起来,这样的话,就可以解决一个非常棘手的问题,构造一个有多个小区间(每个小区间的step都不一样)的跨越一个大区间的向量,哇看着就心动,嘿嘿,try一try看看:

but caution!!!np.hstack只能接收一个参数,所以要用元组的形式传递参数

行了,今天就到这吧,明天开始学习向量的运算,18号要考数学呢,虽然已经复习了好几遍了,但是还是得重视,我还有好多的活没干,老师让我突破方法,今天刚有了点进展,这两天还得加吧劲去搞,python科学计算的学习速度可以慢一点,一天学上一些就行,行了就这样吧,做数学题去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值