python 运算符如何让类支持比较运算

尼马....python大数运算超神了....太实用了有木有...【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:303,376贴子:
尼马....python大数运算超神了....太实用了有木有...收藏
有道题让计算
2的1000次方的 所有数字的和 比如 123就是 1+2+3 =6...我正愁啊大整数...还要算字的和...然后我就了解到python的牛逼之处了 两句话搞定有木有......n=pow(2,1000)print( sum( map( int, str(n)) ) )草。。这特么让我情何以堪啊...
我不会告诉你这样算2^(2^64)后1000位会弱爆了的。。。
3 楼:Python 是强类型语言动态类型语言并非必然是弱类型语言在 python 中甚至没有 cast 变量类型的概念和方法
不客气,确实不少人容易混淆,有一个比较简单的方法可以测试a = 1s = "2"假设用户没自己重载相应的运算符(这里是 +)a + s 会报错类型错误的一般就是强类型语言
请区分好两组概念: 强类型语言/弱类型语言,动态类型语言/静态类型语言,它们是正交的。python是强类型+动态类型,C++是强类型+静态类型,VB是弱类型+静态类型,lua是弱类型+动态类型
刚看的时候觉得整数这说的是废话,后来才知道...
Python 2.2.2 (#0, Nov
7 :30) [C] on symbian_s60Type &copyright&, &credits& or &license& for more information.Ped 2.30.3 beta&&& n=pow(2,1000)&&& print n76&&&
诶?我好像还没import math。。。
python的long型所占内存是可变的,有点像vector那种方式,所以大数爽爆了。
BigInteger/BigDecimal异常淡定。。
C++不是也可以吗?
这么简单就搞定,python确实厉害!不过为什么看完题目,我想到一个叫做“等差数列求和公式”的名词啊。
java也有大数类,c++也可以有,只不过没有商业支持,没人给c++标准库添加。有类似gmp的开源但进不了标准库。
这就如相机中的“傻瓜机”,你不觉得犹如“单反”的C++更有意思吗?
&&& sum = 1&&& for i in range(1000):
if i != 0:
sum *= i&&& sumL
懂个胖塞了不起了?懂运行机制的都知道怎么回事!滚去胖塞吧水
完全看不懂代码————Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:18.0) Gecko/ Firefox/18.0
我只是想来说一句,这些C++可以实现!浮点都可以并且不会丢失精度。
登录百度帐号Python学习手册——Python类型和运算——Python对象类型 - 简书
Python学习手册——Python类型和运算——Python对象类型
Python对象的基本概念
对象是Python中最基本概念。Python程序可以分解成模块、语句、表达式、以及对象
程序由模块构成
模块包含语句
语句包含表达式
表达式建立并处理对象
Python内置类型
Python的核心数据类型
字符串 'sad'
列表 [1,[2,'three'],4]
字典 ['food':'spam']
元组 (1,‘aaa’,'43')
文件 open('filename','r')
集合 set('abc')
其他类型 None,布尔类型
编程单元类型 函数 模块 类
与实现相关的类型 编译的代码堆栈跟踪
Python中的类型特点
Python中并没有类型声明,运行的表达式的语法决定了创建和使用的对象的类型
Python是动态类型的,它会自动地跟踪你的类型而不是要求声明代码
Python也是强类型语言,只能对一个对象进行适合该类型的有效操作
Python数据类型——数字
Python中数字包括:整数、浮点数等(复数、进制数)、固定精度的十进制数、有理分数、集合、布尔类型、无穷的整数精度、各种数字内置函数和模块
基本类型中,Python提供了:整数(正整数和负整数)和浮点数(带有小数部分的数字)
在Python2.6中 整数分为:
一般整数(32位)
长整数(无穷精度)
当整数的值超过32位时会自动转换为长整数。当需要额外的精度的时候,Python会自动地转换为长整数
在Python3.0中 整数是一个单独的类型
Python3.0中,一般整数和长整数已经合二为一了,只有整数这一种。在Python3中整数在程序中不会再用末尾的l或L表示。
十六进制数、八进制和二进制常量
整数可以编写为十进制(以10为基数)、十六进制(以16为基数)、八进制(以8为基数)和二进制(以2为技术)。
十六进制以0x或0X开头,后面接十六进制的数字09和AF
八进制常量以数字0o或00开头,后面接着数字0~7构成的字符串
二进制常量 以0b或0B开头,后面跟着二进制数字0~1
处理进制转换的函数:
oct():会将十进制数转换为八进制数
hex():函数会将十进制转换为十六进制
bin():会将十进制转换为二进制
内置的Int函数会将一个数字的字符串变换为一个整数,并可以通过定义的第二个参数来确定变换后的数字的进制
int('0x40',16)
使用eval函数 可以把字符串作为Python的代码
eval('0o100')
Python的复数常量协程实部+虚部的写法,虚部是以j或J结尾。实部可有可无,
小数数字 decimal
Python2.4介绍了一种新的核心数据类型:小数对象,小数是通过一个导入的模块调用函数后创建的,而不是通过运行常量表达式创建的。小数对象就像浮点数。小数有固定的位数和小数点。小数是有固定的精度的浮点值。
看下面的情况
0.1+0.1+0.1-0.3 这样的结果应该为0 ,但是在Python中运行结果却不是0 而是接近于0
如果使用小数对象来进行准确计算的话:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3'))
decimal模块中的其他工具可以设置所有小数数值的精度、设置错误处理等
import decimal
print(decimal.Decimal(1) / decimal.Decimal(7))
# 设定小数数值精度
在Python2.6之后的版本中,可使用上下文管理器语句来重新设置临时精度,在语句退出后,精度又重新设置为初始值:
decimal.getcontext().prec = 3
print(decimal.Decimal(1) / decimal.Decimal(7))
&&& 0.1429
Python2.6和Python3.0引入了分数类型,实现了有理数对象,明确保留了一个分子和一个分母
分数的模块为 fractions
# 分数模块
from fractions import Fraction
x = Fraction(1, 3)
y = Fraction(4, 6)
# 通过浮点数来运算
Fraction('.25')
Fraction('1.25')
创建分数后,可以进行分数的计算
print(x + y)
print(x - y)
处理数字对象的工具
表达式操作符
* 传统除法和真除法 这个操作对于整数会省去小数部分,在Python3.0后无论任何类型都会保持小数部分
// floor除法 这个操作不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分
对于在Python2.x和Python3.0中,如果程序依赖于截断整数除法,在Python中都使用//。//把结果向下截断到它的下层,真正结果之下的最近整数。但其直接效果是向下舍入,并不是严格截断。对于负数来说会出现 5/-2=-3的情况
&& && 移位运算
内置数学函数
pow、abs、round、int、hex、bin
import math
print(math.pi, math.e)
print(math.sin(2 * math.pi / 180))
print(math.sqrt(144))
print(pow(3, 4))
print(abs(-25))
print(sum((1, 2, 3, 4, 2, 2, 1)))
# 查找最大值
print(max((3, 4, 5, 6, 1, 9)))
# 查找最小值
print(min((1, 3, 5, 4, 9, 8)))
print(math.floor(2.6)) &&&2
print(round(2.6)) &&&3
print(math.trunc(2.3333))
## Python计算平方根
math.sprt(144)
pow(144,.5) 内置方法
标准库中的random模块,可以选出在0和1之间的任意浮点数、选择在两个数字之间的任意整数、在一个序列中任意挑选一项
print(random.random())
# 在0-1中选择任意浮点数
print(random.randint(1, 10))
# 选择两个数字之间的任意整数
print(random.choice(['a', 'b', 'c'])) # 在一个序列中任意挑选一项
random、math
混合操作操作符优先级
括号分组的子表达式优先级要大于二级运算
二级运算大于一级运算
混合类型自动升级
对于 40+3.14这类的混合运算,在Python中就涉及到数字类型的复杂度:整数比浮点数简单,浮点数比复数简单。当一个整数与浮点数混合时。整数首先会升级转为浮点数的值,之后通过浮点数的运算法则得到浮点数的结果。对于任何混合类型的表达式,其中一个操作对象是更为复杂的数字,则会导致其他的操作对象升级为一个复杂的数字。使得表达式获得一个复杂数字类型的结果
Python不会在其他的类型之间进行转换,一个字符串和一个整数相加,就会产生错误。在Python2.6中非数字混合类型也可以比较,但是不会执行转换。在Python3.0中,非数字混合类型的比较是不允许的
数字的模块
math模块包括更高级的数学工具
Python数据类型——字符串
字符串在Python中作为序列,是一个包含其他对象的有序集合,字符串是单个字符的字符串序列
字符串序列操作
支持各个元素包含位置顺序的操作
* 索引按照从最前面的偏移量进行编码:从0开始,第一项索引为0 第二项为1。。。
* 在Python中,我们能够反向索引,从最后一个开始。
S[-1] 等效于 S[len(S)-1]
分片的一般形式为X[I:J]: 表示取出在X中从偏移量为I,直到但不包括偏移量为J的内容
作为一个序列,字符串也支持使用加号进行合并,使用加号将两个字符串合并成一个新的字符串。货值金额重复(通过重复一次创建一个新的字符串)
+ 加号对不同对象有不同的意义:对于数字为加法,对于字符串为合并。
Python允许字符串包括在单引号或双引号、三个引号中。
Python也支持原始字符串常量 不含有反斜线等转移机制,这样的字符串常量是以字母'r'开头的
字符串的不可变性
字符串在Python中具有不可变性——字符串在Python中创建后就不能呗改变。不能通过对某某一位置进行赋值而改变字符串。可以创建一个新的字符串并以同一个变量名对其进行赋值
在Python中的每一个对象都可以分为不可变性或者可变性。
在核心类型中,数字、字符串和元组是不可变的
列表和字典是可以自由的改变。
Python变量赋值
Python变量不需要提前声明,当给一个变量赋值的时候就创建了它。可能赋的是任何类型的对象,当变量出现一个表达式就会用其值替换。
在使用变量的值之前必须对其赋值
返回对象的所有属性 dir
可以调用内置的dir函数,将会返回一个列表。其中包含了对象的所有属性。由于方法是函数属性。所以函数也会在这个列表中出现
Python数据类型——布尔类型
Python中的布尔数据类型,叫做bool,其值为True和False,并且其值True和False是预先定义的内置的变量名。在内部,新的变量名True和False是bool的实例,实际上仅仅是内置的整数类型int的子类。True和False的行为和整数1和0是一样的。它们是作为关键字True和False显示的,而不是数字1和0
Python数据类型——列表
列表是一个任意类型的对象的位置相关的有序集合。列表没有固定的大小。
列表的序列操作
列表是序列的一种,列表支持所有的我们对字符串所讨论过的序列操作
计算列表长度
[123, 'span']
拼接字符串形成一个新的字符串
&&& L+[1,3,4,5,6]
[123, 'span', 1., 4, 5, 6]
[123, 'span', 1.2345]
类型的特定操作
Python的列表与其他语言中的数组有些类似,但列表更加强大。列表没有固定类型的约束。
拼接元素 append方法扩充了列表的大小并在列表的尾部插入一项
&&& L.append('hello')
[123, 'span', 1.2345, 'hello']
移除给定偏移量的一项pop
&&& L.pop(2)
[123, 'span', 'hello']
* sort 按照升序对列表进行排序
* reverse对列表进行翻转
列表没有固定大小,Python不允许引用不存在的元素。超出列表末尾之外的索引会导致错误
Traceback (most recent call last):
File "&pyshell#19&", line 1, in &module&
IndexError: list index out of range
&&& L[99]=1
Traceback (most recent call last):
File "&pyshell#20&", line 1, in &module&
IndexError: list assignment index out of range
Python的核心数据类型支持任意嵌套。能够以任意的组合进行嵌套
&&& M = [[1,2,3],[4,5,6],[7,8,9]]
Python中还有更高级的列表操作,称作列表解析表达式
&&& col2 = [row[1] for row in M]
列表解析表达式通过对序列中的每一项运行一个表达式来创建一个新列表的方法,每次一个,从左至右。列表解析表达式是编写在方括号中的,上面的语句的意思是:把矩阵M的每个row中的row[1]放在一个新的列表中
分析一下,上面的列表表达式 会使用for循环开始循环M,先循环出来的是1,2,3 然后将索引1放到新的列表中,再执行下一次循环 456 取出索引为1 再执行下一次循环 789取出索引为1 所以最终得到的列表为[2,5,8]
在最近的Python版本中,括号中的解析语法可以用来创建产生所需结果的生成器
G = (sum(row) for row in M)
&&& next(G)
&&& next(G)
Python数据类型——集合
Python2.4引入了一种新的类型 集合(set),这是一些唯一的、不可变的对象的一个无序集合
一个项在集合中只能出现一次,不管添加了多少次
集合只能包含不可变的对象类型,列表和字典不能嵌入到集合中,元组由于不可变所以可以嵌入
集合具有列表和字典有共同的行为
集合是可以迭代的
集合既不是序列也不是映射类型,是自成一体的类型。集合本质上具有基本的数学特性
在Python2.x中我们使用set()来创建一个集合。在3.0中我们创建集合使用内置函数来创建集合对象
set('1234')
在Python中 {}是一个字典,所以空的集合必须通过内置函数set来创建
Python3.0中的集合解析
Python3,0还引入了一个集合解析构造,类似于列表解析的形式。集合的解析编写在花括号中。集合解析运行一个循环并在每次迭代时收集一个表达式的结果,通过一个循环变量来访问当前的迭代值以用于集合表达式中。
print({x ** 2 for x in [1, 2, 3, 4]})
在上面这个集合解析表达式中,循环的部分写在表达式的右边,而集合表达式编写在左边。这个集合解析式的含义:对于列表中的每一个元素x,给出包含x的平方的一个新的集合
再来看一个栗子:集合解析也可以迭代其他类型的对象,例如:字符串
print({x for x in 'hello world'})
&&& {'r', 'h', ' ', 'd', 'w', 'o', 'l', 'e'}
print({c * 4 for c in 'hello'})
&&& {'hhhh', 'eeee', 'oooo', 'llll'}
集合的用途
集合由于每项在集合中只能存在集合中存储一次,集合可以用来把重复项从其他集合中过滤掉。直接把集合转换为一个集合
L = [1, 2, 1, 3, 2, 4, 5]
s1 = set(L)
L = list(s1)
Python数据类型——字典
Python中的字典:不是序列,而是一种映射。映射是一个其他对象的集合。通过键而不是通过相对位置来存储的。映射并没有任何可靠的顺序。
字典是Python核心对象集合中的唯一的一种映射类型,具有可变性。可以随需求增大或减小
字典编写在大括号中,并包含一系列的“键:值”对。我们可以通过键对这个字典进行索引来读取或改变键所关联的值。字典的索引操作使用的是和序列相同的语法,只不过在方括号中使用的是键,而不是相对位置
&&& D = {'food':'Spam','quantity':4,'color':'pink'}
&&& D['food']
&&& D['quantity']+=1
{'food': 'Spam', 'quantity': 5, 'color': 'pink'}
字典的操作
字典不是序列,并不包含任何可靠的顺序。如果我们确实需要某种顺序的时候,我们常用的方法就是通过字典的key收集一个键的列表,然后使用列表sort方法进行排序。然后使用Python的for循环逐个进行显示
&&& Ks = list(D.keys())
['food', 'quantity', 'color']
对键的列表进行排序
&&& Ks.sort()
['color', 'food', 'quantity']
按照排序后的键来显示字典的元素
&&& for key in Ks:
print(key,'-&',D[key])
color -& pink
food -& Spam
quantity -& 5
判断键是否存在 if测试
尽管我们能够通过给新的键赋值来扩展字典,但是获取一个不存在的键值仍然是一个错误
但是在某些情况下我们并不是总知道当前的字典中存在什么键,我们就需要先测试键是否存在。
in关系表达式允许我们查询字典中一个键是否存在。并可以使用if进行判断
&&& 'food' in D
&&& 'foot' in D
Python数据类型——元组
元组tuple就像一个不可以改变的列表。就像列表一样,元组是序列,但是它具有不可变性。和字符串类似,元组编写在圆括号中而不是方括号中。支持任意类型,任意嵌套
T = (1, 2, 3, 54,3)
print(len(T))
index(value)
返回value在元组中对应的索引
count(value) 返回对应的value出现的次数
print(T.count(3))
元组类型的混合嵌套
TA = ('spam', 3.0, [11, 22, 33])
print(TA[0])
print(TA[2][2])
元组的长度不可以增长或缩短,因为元组是不可变的
TA.append(33)
会报AttributeError错误
Python数据类型——文件
文件对象是Python代码对电脑上外部文件的主要接口。没有特定的常量语法创建文件。要创建一个文件对象,需要调用内置的open函数以字符串的形式传递给它一个外部的文件名以及一个处理模式的字符串。
在当前文件夹下创建文件,并向它写入文本。
f = open('test.txt', 'w')
f.write('Hello\n')
f.write('world\n')
再读出写入的文件内容
f = open('test.txt', 'r')
text = f.read()
print(text)
tips:Python读取一个文件的最佳方式是不读它,文件提供了一个迭代器。我们可以使用迭代器来进行读取
其他核心类型
Python其他的数值类型:十进制数、分数、布尔值、None(特殊的占位符对象)
Programmer
pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 1. 面向对象都有哪些特性以及你对这些特性的理解 21 2. 访问权限修饰符public、private、protected, 以及不写(默认)时的区别(201...
Python黑帽编程2.3字符串、列表、元组、字典和集合 本节要介绍的是Python里面常用的几种数据结构。通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储、查询、排序等操作,本节介绍的Python内置的数据结构可以满足大多数情况下的需求。...
本节要介绍的是Python里面常用的几种数据结构。通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储、查询、排序等操作,本节介绍的Python内置的数据结构可以满足大多数情况下的需求。这一部分的知识点比较多,而且较为零散,需要认真学习。 2....
Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里...
http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、...
我真的好美啊! 我端着盘子,看着和我长相一模一样的主人,不禁感叹。 自打克隆时代来临,人们就人手配备一个克隆自己的克隆人下属。 像我们这些克隆人,运气好的陪主人长命百岁,运气不好的,主人出了事情,就要当做主人的器官库,为主人做出伟大贡献。也不知道那些搞克隆的在我们脑子里加了...
这个世界那么大了我可以提高的那么多,为什么要那么在意有那么个人是否爱你,他爱你便会爱你做的所有提高自己的事;他不爱你,你做什么也没用, 关心≠爱情
朋友间的关心不要胡乱的看做是“烂桃花”的暧昧,分清现实和幻想,相信爱你的人终会穿过大半个世界来到你身边的,没有勇...
太多时候我也以为会尝遍人间烟火 我也以为眼泪会悄无声息 我也以为人生不过如此大不了放弃重来 但你告诉我:不能放下因为你还没有好好走过 后来你经常回来 我知道你想让我成为什么样子 于是我开始努力 你总是帮助我 哪怕明明自己也快不支 也想让我活的很好
十五年了你就这样继续陪下...
奥兰多迪士尼有4个主题公园,都需要单独买票,我们只去了人气最高的magic kindom(奇幻王国),其他3个分别是epcot(未来世界)、hollywood studio(好莱坞影城)、animal kindom(动物王国)。 【买票建议】我们是在淘宝上买的门票人民币48...
前言 这两天一直在看张云的《品类战略》,今天再来整理思路,总结一下企业打造品牌时会进入的误区。 品牌神创论 国际广告公司喜欢将“品牌”这个概念神化,他们热衷于将品牌的成功归结于“大创意”。这个“大创意”只能依靠少数聪明人的头脑来完成。这意味着,品牌的建立,证明了大部分人都...在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?-土地公问答
在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?
在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?
我平时是做图像上的机器学习实验的,识别和检测之类的.从去年入学一直是用的matlab(老板和实验室同学们都用).但是似乎很多人觉得numpy+matplotlib+scipy比matlab更方便,而且我实际实验中也发现matlab的mex接口很难debug,,而且有时候要用到cuda的话也感觉很难调试,经常就把matlab搞crush了需要重启matlab调试,于是是尝试用python.但是我感觉python很难用诶.我的环境是ubuntu14+pycharm比如:我经常需要在程序中设置断点去看看在图像中找的点对不对,在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便matlab断点断下来之后还可以在命令行中inshow()去看图像的状态matlab的工作空间非常的简洁明了,变量的size和value都是一目了然的.而使用python就让我感觉很不适应,设置断点之后要点debug才能在断点那里停下来(pycharm),而且断点停下之后watch的变量也有好多冗余信息啊,其实我就想看几个坐标几个特征值是不是make sense.请问我是python的使用方法不对呢还是图像类的本来就适合matlab,还是其他什么原因?
千言万语汇成一句话: 安装Anaconda!Anaconda非常适合做研究.Pycharm适合做开发,而不是研究.为什么说Anaconda好呢?1 自带了很多适合搞科学研究的库,比如numpy, scipy, pandas, matplotlib, sympy, sklearn等.2 里面的spyder的界面非常像matlab的界面, 还支持单步调试.3 里面的ipython notebook, 非常适合交互和展示成果.
因为专业!像我这种程序员就天生受不了 Matlab 那种奇奇怪怪的语法,但是 Matlab 在它所擅长的领域里做得很好!非常好!!只要你不拿 Matlab 当 Python 用就好。Python 是通用编程语言,不是 Matlab 那种专业货。既然是通用的,你拿它做科学计算当然没问题,但是你会发现它不是专门为此设计的,如果你不懂(通用)编程,那么你会发现有很多你所不理解的地方。「在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便「matlab断点断下来之后还可以在命令行中inshow()去看图像的状态」另请注意,Python 只是一门编程语言。PyCharm 是一个为 Python 开发而设计的 IDE,但不是 Python 天生和唯一的 IDE,更不是为科学计算所专门设计的。(不过有个叫 sagemath 的平台是专为科学计算设计的,其主语言是 Python。)PyCharm 设置断点之后不能查看图像了吗?我没用过 PyCharm 所以不知道。但是我知道 Python 肯定是可以做到的。我调试过程中就会经常在有疑问的地方停下来,开个 Python 交互式命令行来仔细研究研究。有时我也会使用 pudb 这种专业(复杂)的调试工具。
额.......试试WinPython? 有了它我已经好久没开matlab了
python debug只用过log & gdb,断点之类从来没用过。
有这感觉就对了,也不枉费matlab卖那么贵!
除开矩阵运算,python的表达能力比matlab高不知道多少。。(最近接一个matlab项目被这奇葩语法搞得痛不欲生的吐槽)调试方面的话,不管pycharm还是anaconda我都只习惯看log。。断点什么的,不好用呢。。传说python程序员的两次飞跃发生在学会decorator和unit test后,再有万能的import大法加持,你就会感受到蜕变了~~
放弃pycharm,放弃ide吧。以后很多情况你只能拿个文本编辑器,上来自己手撸代码。你说不知道函数名接口是啥咋写?ipython啊,交互式查询。你说看不到变量状态,没有MATLAB右侧那种variable space。一开始我也这么想的,可是后来遇到个1的矩阵,MATLAB也根本显示不出来。你想查变量形状,直接.shape啊。最大值最小值平均值方差全有方法调用啊。基本知道这些信息,也就对变量认识清楚了,我不信你能MATLAB里挨个瞅矩阵上百万个元素。python里import实在太好了,函数变量类的来源十分清晰,一个MATLAB工程里,二三十个函数文件。随便哪里一用函数,根本不好找。还有面向对象编程,多种数据结构(dict,set),list comprehension,这些对精简代码,增加复用都有莫大帮助,MATLAB根本没法比。想快速验证想法,MATLAB可以。但要是给别人用,还是python吧。人生苦短啊〒_〒
编程处女答,零基础裸学matlab半路继续裸学python,过程痛苦,对于为什么难深有体会:被要求整改了,原来我是从一个没有计算机基础硬进入python的角度来描述学习的痛苦。可能这个角度比较片面,所以我修改了描述方法,以及简述了我自己怎么克服:支持矩阵运算,惯坏了我们这群0计算机基础的白菜。写个模拟生成个随机数矩阵然后.*./甚至.^,简直爽快。 然后到python里些好处全没了,.*./变成了复杂和更复杂的循环,对于刚转到python上的人,算一个小噩梦2.用包矩阵化解决掉第一个问题后,碰上第二个。Matlab函数想用就用,继续惯坏我们非计算机出身,要多美好有多美好。然后到了各类面向对象的语言里,先调用,再使用。向numpy这样函数大量重名的大包还不敢调用*,非得一个个调。有时还有分清对象,sub对象,方法。这个问题接触面相对象总是逃不掉的,有VBA基础可能会不那么吃力3.然后只要一写循环就会碰到的:缩进,缩进,缩进!Matlab自动缩进外扩分层,继续惯坏非CS简直美好python我想用游标卡尺!(真不是网上的梗,我自发的想)。我自己通过写短循环多段和灰字注释能克服一部分函数不懂直接help能告诉你函数的用法。python里能看源代码,对于非计算机粗生的一开始会有阅读困难。好在各包的web都是良心的。5.我这个弱逼还没遇到的路上的各种天坑。我真的不是黑python,毕竟算法相同模拟一跑Matlab就掩面了。同时掩面的还有Matlab里那一横函数窗口,连存都要多存好几个。以上都是非CS零基础学习多语言时被呵呵的肺腑之言。肯定会遭致程序员们的集体鄙视,所以被要求整改我没啥怨言。只是我有一个小小的奢望,奢望程序员大神们能够体会我们这些半路出家,又要学数学,又要学算法,还要学语言,还要学市场看case的弱逼金数生。我们经常嘲笑自己是WOW里幻想四修的德鲁伊(金融,数学,统计,计算机)四个天赋,奈何天赋不够还没有装备。我们当中甚至有完全不喜欢计算机的学生笔者自己强行看一段又一段的代码。可以指责我们不喜欢就不要学,但是我们金数的学生都深知短板效应的可怕,以及学金融不懂计算机是何其的幼稚。对于我们而言,编程的唯一的目的就是实现,在此奢望一些理解。我们很弱,不怕被喷,喷我们我们也能学到东西。
只说明一点你还不善于使用python,如果能熟练运用就不会有你这种感受了。
如果matlab还没python好用,怎么对得起那几万块钱。
看完了楼上的答案。先明确一点,题主做机器学习,所以以下都针对机器学习。这个问题分两方面。首先是语法角度。从纯语法上看,python 显然比Matlab 好很多,但对于机器学习,Matlab 已经足够用,能在保证能力强大的基础上足够简单,完全符合科研人员的需求。比如Matlab 里的类和对象是一团翔,但没关系,因为科研人员用不到。一般搞科研,只需要写个prototype ,能跑通就行,这时候Matlab “对面向对象的支持很差”反而成了一个优点,因为只需要面向过程即可,而面向过程的思路是非常自然而直观的。当然,mex 不好写,GPU编程不方便,这确实是Matlab 的硬伤。另外Matlab 的运行效率比低,内存管理非常差,这也是一大缺点。但题主的问题显然不是语言层次的问题。看描述,题主感觉python 不方便。从语言角度,numpy+matplotlib+scipy 是足够强大的,能满足科研人员的一切需求,而且作为脚本语言,python写起来也比java c++简单很多。那问题肯定出在工具上。Matlab 的IDE 非常适合做科学计算,但PyCharm 只是个通用IDE,风格针对普通编程,并未对科学计算有特殊优化,非计算机出身可能用起来稍有不便。所以我建议题主试试其他IDE。上面有人推荐Spyder,这个和Matlab 非常像,基本可以无缝接入。另外ipython notebook 也是神器,能写程序能作笔记能分发展示,非常好用。不过我现在一般都用VS 的python 插件PTVS(Python Tools for Visual Studio),有强大的VS 作支持,代码补全啊、自动跳转啊、调试啊等等都极其方便,推荐给题主和大家。
Ipython notebook 是未来,是你主要的测试开发场所,因为交互式,适合研究以及报告展示,相当于matlab 的工作本。pycharm 不过是一个一般向ide,适合程序开发,而spyder 是另一种类似rstudio 的ide,看个人喜好选择。工具只是工具而已,我还matplotlib 和 ggplot 混用呢。最后,anaconda是软件包 (stack),和题主所问的一点关系都没有,用来装各种library 确实方便。我一般是 IPython notebook + rmagic + pycharm + cython 一起使用, 通过conda 安装。最后说一个题外话,python 对断点调试支持不是很友好(毕竟动态语言),所以很多人靠log or ipdb 。最强的断点调试是visual studio 下调试c#, 没有之一。
你都说了,是你不适应呀。
你应该去极客学院。不吹不黑
相比之下Python写程序、调试确实比MATLAB复杂。不过Python开发周期一般都挺长,开始的时候忍一忍,随着代码越来越复杂,一开始写的各种debug、unit test会让开发大工程越来越顺手。而MATLAB呢,有一个新的idea之后就需要把前面的工程推导重做,当然没时间写各种脚本,于是mathworks就代劳了许多。不过这也是相对的,MATLAB代码复杂度上去之后,哪个更方便可就得另说了。
定位都不同,怎么比较?
anaconda加一~但是感觉都是在仿matlab...周围人都用matlab,只有自己用python还是挺难坚持的 ...
我也觉得《上古卷轴》的邪恶MOD比I社的游戏难用很多~匿了。
matplotlabwingide
付费软件和免费软件的区别
其它类似问题
其它人正在问的问题

我要回帖

更多关于 如何让python支持中文 的文章

 

随机推荐