Python科学计算之简单环境搭建
这个是对于Python做科学计算,一张相对完整的思维导图
在以前的科学计算是没有conda的地位的,都是这个python(x,y)的项目
你可以尝试的使用,我这里就是一个推荐
https://python-xy.github.io/
https://python-xy.github.io/downloads.html
https://cn.bing.com/?FORM=Z9FD1
这里我安利一下,微软的搜索
我们主要用ipython来学习,之后用Ide来工作
我们想在开机运行的时候就运行一段代码
import numpy as np
import scipy as sp
import pylab as pl
from numpy import *
我们这里用-i的选项,引入环境
$ ipython [options] files
如果在没有选项的情况下调用,它将执行按顺序列出的所有文件,并将您放到解释器中,同时仍然确认您在
ipythonrc
档案。这种行为与标准Python不同,标准Python被称为python -i
将只执行一个文件并忽略配置设置。
$ ipython -i myfile.py
我这里没有什么在打开的一瞬间就引入库的好办法,这里先手动
会报错,你的版本可能不会
将这库降级
pip install --upgrade 'jedi<0.18.0'
然后试试有没有成功
也可以直接的使用一些cmd命令
我们这里IDE使用Spyder是python(x,y)的项目的进化版
spyder是Python(x,y)的作者为它开发的一个简单的Python开发环境。和其它Python IDE相比它最大 的优点就是模仿MATLAB的workspace功能,可以很方便地观察和修改数组的值。
通过给array函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列,将创建多 维数组
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
我们这里先创建一些数组
打印的结果
可以有一些方法,查询变量类型+数据结构大小
数组a的shape只有一个元素,因此它是一维数组。
而数组c的shape有两个元素,因此它是二维数组, 其中第0轴的长度为3,第1轴的长度为4。
还可以通过修改数组的shape属性,在保持数组元素个数不 变的情况下,改变数组每个轴的长度。
下面的例子将数组c的shape改为(4,3),注意从(3,4)改为(4,3)并 不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变:
各个大小的数组大小
原有的大小
变换后的大小
当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度,因此下面的程序将数组c的 shape改为了(2,6):
输出的结果
使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变:
输出的结果
可以看到a,b的数据是共享一快内存的
你会问为什么?
你看就是这样,我对a[1]元素做了更改
数组的元素类型可以通过dtype属性获得。
上面例子中的参数序列的元素都是整数,因此所创建的数组 的元素类型也是整数,并且是32bit的长整型。
可以通过dtype参数在创建时指定元素类型:
红字部分就是元素类型的参数
上面的例子都是先创建一个Python序列,然后通过array函数将其转换为数组,这样做显然效率不高。
可以直接使用现成的函数来进行数据列的生成
arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意 数组不包括终值
linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定 是否包括终值,缺省设置是包括终值
logspace函数和linspace类似,不过它创建等比数列,上面的例子产生1(10^0)到100(10^2)、 有20个元素的等比数列
使用frombuffer, fromstring, fromfile等函数可以从字节序列创建数组
Python的字符串实际上是字节序列,每个字符占一个字节,因此如果从字符串s创建一个8bit的整数数 组的话,所得到的数组正好就是字符串中每个字符的ASCII编码
如果从字符串s创建16bit的整数数组,那么两个相邻的字节就表示一个整数,把字节98和字节97当作 一个16位的整数,它的值就是98*256+97 = 25185。
可以看出内存中是以little endian(低位字节在 前)方式保存数据的。
如果把整个字符串转换为一个64位的双精度浮点数数组,那么它的值是以上
显然这个例子没有什么意义,但是可以想象如果我们用C语言的二进制方式写了一组double类型的数 值到某个文件中,那们可以从此文件读取相应的数据,并通过fromstring函数将其转换为float64类型 的数组。
与C语言的集成是另外一个有趣的故事
以上函数将数组下标转换为数组中对应的值,然后使用fromfunction函数创建数组.
fromfunction函数的第一个参数为计算每个数组元素的函数,第二个参数为数组的大小(shape),因为 它支持多维数组,所以第二个参数必须是一个序列,本例中用(10,)创建一个10元素的一维数组。
这不,就是一个9x9的乘法表
在其上面就像matlab一样的变量表
可以直接的编辑这些元素
可以直接绘图
这样就可以直接的绘图出来
[1,2,3,4]
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
%varexp --plot b
%varexp --hist a
a
b
c
c.dtype
a.shape
b.shape
c.shape
c.shape = 4,3
c
c.shape = 2,-1
c
d = a.reshape((2,2))
d
a
a[1]=7
a
d
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.complex)
np.arange(0,1,0.1)
np.linspace(0, 1, 12)
np.logspace(0, 2, 20)
s = "abcdefgh"
np.fromstring(s, dtype=np.int8)
np.fromstring(s, dtype=np.int16)
np.fromstring(s, dtype=np.float)
def func(i):
return i%4+1
np.fromfunction(func, (10,))
def func2(i, j):
return (i+1) * ( j+1)
a = np.fromfunction(func2, (9,9))
a
%varexp --plot c
%varexp --plot b
以上的代码是以上我写的所有代码,有需要复制使用的朋友可以直接使用