Python 数值计算

Python是一门解释型的高级编程语言,特点是简单明确。Python作者是荷兰人Guido van Rossum, 介于C和Shell之间,同时吸取ABC语法中的优点语言专家Bruce Eckel的那句名言:Life is short, you need Python. 后来这句话的中文版“人生苦短,我用Python”被Guido印在了T恤上。Python拥有很好的扩充性,可以非常轻松地用其他语言编写模块供调用,用Python编写的模块也可以通过各种方式轻松被其他语言调用。所以一种常见的Python使用方式是,底层复杂且对效率要求高的模块用C/C++等语言实现,顶层调用的API用Python封装,这样可以通过简单的语法实现顶层逻辑,故而Python又被称为“胶水语言”。

 Python中最基本的数据类型包括整型,浮点数,布尔值和字符串。类型是不需要声明的
 #是行内注释。
 type函数可以查看一个变量的类型
 a赋值为1后,b=a执行时并不会将a的值复制一遍,然后赋给b,而是简单地为a所指的值,也就是1建立了一个引用,相当于a和b都是指向包含1这个值的这块内存的指针。id函数可以让我们知道每个变量指向的是不是同一个值
 符串用双引号和单引号都可以,区别主要是单引号字符串中如果出现单引号字符则需要用转义符,双引号也是一样,所以在单引号字符串中使用双引号,或者双引号字符串中使用单引号就会比较方便。另外三个双引号或者三个单引号围起来的也是字符串,因为换行方便,更多用于文档。
 字符串前加r表示字符串内容严格按照输入的样子,好处是不用转义符了,非常方便。
 Python2中两个数值相除会根据数值类型判断是否整数除法,Python3种则都按照浮点数。
 python乘方,它是“ ** ”(第三阶运算)
 位操作 ( &,|,~,^,<<,>>

a = 2
b = 2.3         
c = 3
a + b           # 2 + 2.3 = 4.3
c – a           # 3 - 2 = 1
a / b           # 整数除以浮点数,运算以浮点数为准,2 / 2.3 = 0.8695652173913044
a / c           # Python2中,整数除法,向下取整 2 / 3 = 0
a ** c          # a的c次方,结果为8
a += 1          # Python中没有i++的用法,自增用+=
c -= 3          # c变成0了
d = 'Hello'     
d + ' world!'   # 相当于字符串拼接,结果为'Hello world!'
d += ' "world"!'# 相当于把字符串接在当前字符串尾,d变为'Hello "world"!'
e = r'\n\t\\'   
print(e)        # '\\n\\t\\\\'
a = True
b = False
a and b     # False
a or b      # True
not a       # False
~8      # 按位翻转,1000 --> -(1000+1)
8 >> 3  # 右移3位,1000 --> 0001
1 << 3  # 左移3位,0001 --> 1000
5 & 2   # 按位与,101 & 010 = 000
5 | 2   # 按位或,101 | 010 = 111
4 ^ 1   # 按位异或,100 ^ 001 = 101
a = 1
b = 1.0
c = 1
a == b  # True,值相等
a is b  # False,指向的不是一个对象,这个语句等效于 id(a) == id(b)
a is c  # True,指向的都是整型值1

Python使用NumPy包完成了对N-维数组的快速便捷操作。使用这个包,需要导入numpy。SciPy包以NumPy包为基础,大大的扩展了numpy的能力。为了使用的方便,scipy包在最外层名字空间中包括了所有的numpy内容,因此只要导入了scipy,不必在单独导入numpy了!

Import numpy as np 
Import scipy as sp

下面简要介绍Python和MATLAB处理数学问题的几个不同点。

  1. MATLAB的基本是矩阵,而numpy的基本类型是多为数组,把matrix看做是array的子类。
  2. MATLAB的索引从1开始,而numpy从0开始。
  3. MATLAB的子元素引用(),而numpy是[]。
  4. MATLAB建立一个列向量不同元素之间使用空格或者逗号分开都是可以的, 每行分号分开即可;
    当然也可以使用行向量的转置(一个撇号表示转置)。 A=[1;2;3] 或者 A=[1,2,3]’
  5. 数组:
    给定初值v,和长度l,定义list s,append()、extend()和insert()
[[0 for col in range(cols)] for row in range(rows)]

python 的向量反转有一个很简单的办法

b=a[::-1]
b== np.flipud(ini_array)

1、list变array:np.array(list)
2、array变list:data.tolist()
3、array与matrix相互转化:np.asmatrix和np.asarray()
4、list变matrix:np.mat(list)
 两个list中对应元素相加

l5 = [a + b for a,b in zip(l1, l2)] # 数值相加

 array是可以直接四则运算

a2=np.array([[1,2,3],[2,3,4]]) #建立一个二维数组。此处和MATLAB的二维数组(矩阵)的建立有很大差别。
c1=np.arange(2,3,0.1) #起点,终点,步长值。含起点值,不含终点值。
c2=np.linspace(1,4,10) #起点,终点,区间内点数。起点终点均包括在内。同理,有logspace()函数
d1=np.linalg.companion(a) #伴随矩阵
d2=np.linalg.triu()/tril() #作用同MATLAB中的同名函数
e1=np.random.rand(3,2) #产生一个3行2列的随机数组。同一空间下,有randn()/randint()等多个随机函数
fliplr()/flipud()/rot90() #功能类似MATLAB同名函数。
xx=np.roll(x,2) #roll()是循环移位函数。此调用表示向右循环移动2位。

4.矩阵运算
np.dot(a,b)用来计算数组的点积;vdot(a,b)专门计算矢量的点积,和dot()的区别在于对complex数据类型的处理不一样;innner(a,b)用来计算内积;outer(a,b)计算外积。
5 Help

help(np.array) #查看关于array的帮助信息
help(np.add) #查看关于add的帮助信息

6 内置基础数学库

直接导入Python的内置基础数学库

import math
print(math.cos(math.pi)) 

从math中导入cos函数和pi变量

from math import cos, pi
print(cos(pi)) 

如果是个模块,在导入的时候可以起个别名,避免名字冲突或是方便懒得打字的人使用

import math as m
print(m.cos(m.pi)) 

从math中导入所有东西

from math import *

 列表的基本操作有访问,增加,删除,和拼接:

a.pop()             # 把最后一个值4从列表中移除并作为pop的返回值
a.append(5)         # 末尾插入值,[1, 2, 3, 5]
a.index(2)          # 找到第一个2所在的位置,也就是1
a[2]                # 取下标,也就是位置在2的值,也就是第三个值3
a += [4, 3, 2]      # 拼接,[1, 2, 3, 5, 4, 3, 2]
a.insert(1, 0)      # 在下标为1处插入元素0,[1, 0, 2, 3, 5, 4, 3, 2]
a.remove(2)         # 移除第一个2,[1, 0, 3, 5, 4, 3, 2]
a.reverse()         # 倒序,a变为[2, 3, 4, 5, 3, 0, 1]
a[3] = 9            # 指定下标处赋值,[2, 3, 4, 9, 3, 0, 1]
b = a[2:5]          # 取下标2开始到5之前的子序列,[4, 9, 3]
c = a[2:-2]         # 下标也可以倒着数,方便算不过来的人,[4, 9, 3]
d = a[2:]           # 取下标2开始到结尾的子序列,[4, 9, 3, 0, 1]
e = a[:5]           # 取开始到下标5之前的子序列,[2, 3, 4, 9, 3]
f = a[:]            # 取从开头到最后的整个子序列,相当于值拷贝,[2, 3, 4, 9, 3, 0, 1]
a[2:-2] = [1, 2, 3] # 赋值也可以按照一段来,[2, 3, 1, 2, 3, 0, 1]
g = a[::-1]	    # 也是倒序,通过slicing实现并赋值,效率略低于reverse()
a.sort()
print(a)            # 列表内排序,a变为[0, 1, 1, 2, 2, 3, 3]

 for循环
强行缩进来表明成块的代码

for i in xrange(len(words)):
    print(words[i])

 if和分支结构

if pet == 'dog':        # 狗粮
        food = 'steak'      # 牛排
    elif pet == 'fly':      # 苍蝇
        food = 'sh*t'       # 
    else:
        pass

 函数

def say_hello():
print('Hello!')
np.abs(arr)   #abs,fabs  计算整数、浮点数或者复数的绝对值,对于非复数,可以使用更快的fabs
                np.sqrt(arr)    #计算各个元素的平方根
                np.square(arr)  #计算各个元素的平方 
                np.exp(arr)  #计算各个元素的指数e的x次方
                np.log(arr)
                np.log2(arr)
                np.log1p(arr)  #分别计算自然对数、底数为2的log以及底数为e的log(1+x)
                np.sign(arr)  #计算各个元素的正负号: 1 正数,0:零,-1:负数
                np.ceil(arr)  #向上取整
                np.floor(arr) #向下取整
                np.rint(arr)  #四舍五入
                np.var( arr )  #求该arr方差 ,所有元素  
np.unique(arr) #去除重复元素

 字符串

a = 'Life is short, you need Python'
a.lower()              	# 'life is short, you need Python'
a.upper()               	# 'LIFE IS SHORT, YOU NEED PYTHON'
a.count('i')            	# 2
a.find('e')             	# 从左向右查找'e',3
a.rfind('need')         	# 从右向左查找'need',19
a.replace('you', 'I')   # 'Life is short, I need Python'
tokens = a.split()    	# ['Life', 'is', 'short,', 'you', 'need', 'Python']
b = ' '.join(tokens)	# 用指定分隔符按顺序把字符串列表组合成新字符串
c = a + '\n'            	# 加了换行符,注意+用法是字符串作为序列的用法
c.rstrip()              	# 右侧去除换行符
[x for x in a]          	# 遍历每个字符并生成由所有字符按顺序构成的列表
'Python' in a   			# True

 文件操作

f = open(r"G:\6Tipdm\file_read_write\yesterday.txt","r+",encoding="utf-8")
data  = f.read()
print(data[:245])
f.close()
f = open(r"G:\6Tipdm\file_read_write\yesterday2.txt","w+",encoding="utf-8")
f.write("我爱北京天安门")
f.close()
 
str() 将数字包住file.write(str(12));
print >> fd,可以直接输入int类型

 # 使用子图

plt.figure()
plt.suptitle('Total title', size=16)  # 整张图的总标题
x = np.linspace(0, 2 * np.pi, 50)
plt.subplot(2, 1, 1) # (行,列,活跃区)
plt.title('subplot 1')  # 子图的小标题
plt.plot(x, np.sin(x), 'r')
plt.subplot(2, 1, 2)
plt.title('subplot 2')  # 子图的小标题
plt.plot(x, np.cos(x), 'g')
plt.show()

 python代码换行就是每行后面加个 \

 嵌套的python list转成一个一维的python list

  x = [[2],[23],[3]]
y = sum(x,[])lst2=[x+y for x in range(10) if x>5 for y in range(10) if y<5 ]list2=[[ y[x] for y in list ] for x in range(4)]#使用复杂推导式将数组转置y='{:.5f}'.format(x) # 5f表示保留5位小数点的float型
    Cm_p_i = []
    for x in C:
        if type(x) is np.ndarray:
           C_i.append('{:.2g}'.format(x[0][0]))
        else:
           C_i.append('{:.2g}'.format(x))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值