p***f 发帖数: 1 | |
n********t 发帖数: 21 | 2 数学系会用c++算算数值分析,偏微分方程一类东西。
数学系的不懂硬件,很多都干不了
:还是上课了。应用数学转码貌似很轻松。 |
d*****u 发帖数: 17243 | 3 数学系甚至包括EECS系很多人做研究都只用matlab跑跑数学模型
在企业没人用matlab |
n********t 发帖数: 21 | 4 有算cfd的,用c艹
:数学系甚至包括EECS系很多人做研究都只用matlab跑跑数学模型
:在企业没人用matlab |
d*****u 发帖数: 17243 | 5 貌似最初发展超算的动力之一就是搞天气预报数值分析
现在用C++是不是也因为继承的代码比较多?
现在Python写的接口多吗?
【在 n********t 的大作中提到】 : 有算cfd的,用c艹 : : :数学系甚至包括EECS系很多人做研究都只用matlab跑跑数学模型 : :在企业没人用matlab
|
b*d 发帖数: 285 | 6 不用上课。只要不是开发复杂产品。你只要知道回字的一种写法即可。只会matlab的,
会有些难度。作为非CS,花两周熟悉一下基本语法。然后一边google一边编程,就把该
干的干了。
【在 p***f 的大作中提到】 : 还是上课了。应用数学转码貌似很轻松。
|
d******r 发帖数: 16947 | 7 应用数学就是以前的软件工程专业,
高级语言C/C++, 数据库,数据结构,操作系统都学,可能CS核心课就编译原理不学
【在 p***f 的大作中提到】 : 还是上课了。应用数学转码貌似很轻松。
|
n********6 发帖数: 243 | 8
有的小的学校现在还是Computer Science and Mathematics,是一个专业名称
【在 d******r 的大作中提到】 : 应用数学就是以前的软件工程专业, : 高级语言C/C++, 数据库,数据结构,操作系统都学,可能CS核心课就编译原理不学
|
l********e 发帖数: 3986 | |
f****i 发帖数: 1 | 10 看来你虽身为码农,对计算也是屁都不懂
之所以用c++,是因为可以实现运算符重载,这对大规模数值计算极为重要
比如,一个2维的偏微分方程,我们可以写成矩阵形式:
dx/dt=f(x),
这里x是2维矩阵,f(x)是2维矩阵x的函数
我现在写好了2维情况的程序,要把它扩展到3维,你要是用java python写就彻底完蛋
了,你得重写,软件一大你得浪费好几年时间。
但是c++下你可以定义全新的运算符重载,加法可以准对数字,也可以准对矩阵,软件
自动适应,这样你扩展到3维只需要更改下x的定义就可以了,根本不需要全部重写。
【在 d*****u 的大作中提到】 : 貌似最初发展超算的动力之一就是搞天气预报数值分析 : 现在用C++是不是也因为继承的代码比较多? : 现在Python写的接口多吗?
|
|
|
m**c 发帖数: 1012 | 11 我学计量经济用的FORTRAN很奇怪吗
【在 p***f 的大作中提到】 : 还是上课了。应用数学转码貌似很轻松。
|
d*****u 发帖数: 17243 | 12 真蠢,你难道不知道Python等其他语言也可以实现运算符重载?
不就是继承并改写一个类吗,还当个宝一样
你不知道现在深度学习模型里张量的维数全是抽象的,initialize的时候才指定?
还是你觉得C++是唯一的面向对象的语言?
再者说,问的是接口
Python执行起来比较慢,但是开发起来比较快
所以在数据分析里一般不作为复杂算法的基础library,而是作为上层接口
你是烂校毕业的吧,怎么智商和情商都这么低?
尼玛一个最基本的inheritance当个宝一样的炫耀
就像当初极为弱智地炫耀学过积分变换一样
本科的时候身边烂人太多让你对自身实力严重误判?
【在 f****i 的大作中提到】 : 看来你虽身为码农,对计算也是屁都不懂 : 之所以用c++,是因为可以实现运算符重载,这对大规模数值计算极为重要 : 比如,一个2维的偏微分方程,我们可以写成矩阵形式: : dx/dt=f(x), : 这里x是2维矩阵,f(x)是2维矩阵x的函数 : 我现在写好了2维情况的程序,要把它扩展到3维,你要是用java python写就彻底完蛋 : 了,你得重写,软件一大你得浪费好几年时间。 : 但是c++下你可以定义全新的运算符重载,加法可以准对数字,也可以准对矩阵,软件 : 自动适应,这样你扩展到3维只需要更改下x的定义就可以了,根本不需要全部重写。
|
d*****u 发帖数: 17243 | 13 大一以后就没看过FORTRAN了(当时我们还上机考试)
后来发现其实人家也一直在更新,不知道你学的是哪个版本
老FORTRAN的GOTO一直为人诟病,但有时还真是解决大问题。
【在 m**c 的大作中提到】 : 我学计量经济用的FORTRAN很奇怪吗
|
f****i 发帖数: 1 | 14 好吧你真聪明,
我定义一个exp(x)函数,
这里x原来是数字,exp(x)就成为常见函数,
我现在要把x重新定义为矩阵,这样exp(x)就用hausdorf展开,
你说说python里面不修改程序能不能执行?
你有这样的观点,因为你们python业界不涉及一些稀奇古怪的算法,
所以以为Python也能做
【在 d*****u 的大作中提到】 : 真蠢,你难道不知道Python等其他语言也可以实现运算符重载? : 不就是继承并改写一个类吗,还当个宝一样 : 你不知道现在深度学习模型里张量的维数全是抽象的,initialize的时候才指定? : 还是你觉得C++是唯一的面向对象的语言? : 再者说,问的是接口 : Python执行起来比较慢,但是开发起来比较快 : 所以在数据分析里一般不作为复杂算法的基础library,而是作为上层接口 : 你是烂校毕业的吧,怎么智商和情商都这么低? : 尼玛一个最基本的inheritance当个宝一样的炫耀 : 就像当初极为弱智地炫耀学过积分变换一样
|
d*****u 发帖数: 17243 | 15 我这打字不方便,就给你一个最简单的Python例子(加法重载)你去看看
class Compute(object):
def __init__(self, value):
self.value = [value, value]
def __add__(self, vector):
return [self.value[0]+ vector[0], self.value[0] + vector[1]]
(发出来以后缩进可能有错误)
这时候执行
$var = Compute(1)
$var + [2,3]
你会得到[3,4]
【在 f****i 的大作中提到】 : 好吧你真聪明, : 我定义一个exp(x)函数, : 这里x原来是数字,exp(x)就成为常见函数, : 我现在要把x重新定义为矩阵,这样exp(x)就用hausdorf展开, : 你说说python里面不修改程序能不能执行? : 你有这样的观点,因为你们python业界不涉及一些稀奇古怪的算法, : 所以以为Python也能做
|
f****i 发帖数: 1 | 16 帮帮忙,你根本没看懂我在说什么
【在 d*****u 的大作中提到】 : 我这打字不方便,就给你一个最简单的Python例子(加法重载)你去看看 : class Compute(object): : def __init__(self, value): : self.value = [value, value] : def __add__(self, vector): : return [self.value[0]+ vector[0], self.value[0] + vector[1]] : (发出来以后缩进可能有错误) : 这时候执行 : $var = Compute(1) : $var + [2,3]
|
f****i 发帖数: 1 | 17 cpp是全面的,完全的overloading
python是有限的overloading
你觉得我不知道python可以加减乘除overloading
其实不是,你再想想如何把exp(x)这样的玩意overloading
你就会发现很多细节python有很大局限 |
h****g 发帖数: 11365 | 18
Waterloo的计算机就在数学院里边。
【在 n********6 的大作中提到】 : : 有的小的学校现在还是Computer Science and Mathematics,是一个专业名称
|
d*****u 发帖数: 17243 | 19 别硬拗了,还是你自己根本不知道自己在说什么?
你举例说C++之外的语言定义的函数维度变了就没法用了
我给你举例把加法扩展到了二维list
(Python自带的list加法重载不是那样的,而是拼接)
我那个例子没有写各种condition,但那个添加起来很容易
你如果稍微具有举一反三的能力的话
就应该能看懂继承任何类函数、重载运算符在Python里都是轻而易举
在Python里inheritance也很简单
Class EXP(object):
blah blah blah
然后你自己写一个
Class MyEXP(EXP):
def change_function(self, input):
blah blah blah
【在 f****i 的大作中提到】 : 帮帮忙,你根本没看懂我在说什么
|
d*****u 发帖数: 17243 | 20 你用过Tensorflow和PyTorch吗?
都是Python界面的
所有向量、矩阵、张量什么的全都可以直接加减乘除,跟实数加减乘除的符号一样
而且一个实数可以直接和向量相加,程序自动扩展维度
低维向量也可以跟张量相加,相减,相乘,都是自动扩展
(不过乘法符号是element-wise multiplication,矩阵乘法是另外一个函数名)
当然这个例子不是特别好,因为TF这些工具不是纯Python
【在 f****i 的大作中提到】 : cpp是全面的,完全的overloading : python是有限的overloading : 你觉得我不知道python可以加减乘除overloading : 其实不是,你再想想如何把exp(x)这样的玩意overloading : 你就会发现很多细节python有很大局限
|
|
|
f****i 发帖数: 1 | 21 显然你没玩过这么复杂的数值方法,
python不能自动解析变量overloading后的函数
你得转换类型
比如exp(x),x是数字没问题,
x如果是矩阵,你没玩过吧?
你在前面重新定义了新的exp(x)后,
如果是python,在程序中间调用exp(x)的地方都得改,
而且python不能自动识别x是矩阵还是数字后的exp(x)
所以改起来还特别麻烦
拜托,你再仔细想想我上面说的,
不是就你知道python
【在 d*****u 的大作中提到】 : 别硬拗了,还是你自己根本不知道自己在说什么? : 你举例说C++之外的语言定义的函数维度变了就没法用了 : 我给你举例把加法扩展到了二维list : (Python自带的list加法重载不是那样的,而是拼接) : 我那个例子没有写各种condition,但那个添加起来很容易 : 你如果稍微具有举一反三的能力的话 : 就应该能看懂继承任何类函数、重载运算符在Python里都是轻而易举 : 在Python里inheritance也很简单 : Class EXP(object): : blah blah blah
|
f****i 发帖数: 1 | 22 tensorflow不涉及sin(x),cos(x),exp(x)的变量x成为矩阵的情况
【在 d*****u 的大作中提到】 : 你用过Tensorflow和PyTorch吗? : 都是Python界面的 : 所有向量、矩阵、张量什么的全都可以直接加减乘除,跟实数加减乘除的符号一样 : 而且一个实数可以直接和向量相加,程序自动扩展维度 : 低维向量也可以跟张量相加,相减,相乘,都是自动扩展 : (不过乘法符号是element-wise multiplication,矩阵乘法是另外一个函数名) : 当然这个例子不是特别好,因为TF这些工具不是纯Python
|
d*****u 发帖数: 17243 | 23 同学,你不要学弃婴不懂装懂好不好
那是东施效颦
我还就给你试了一下
In [1]: import torch
In [2]: x = torch.randn(2,4)
In [3]: x
Out[3]:
tensor([[ 0.3378, -1.9106, -0.0450, -0.7296],
[-0.0515, -0.9221, 0.6412, 0.9279]])
In [4]: torch.sin(x)
Out[4]:
tensor([[ 0.3315, -0.9428, -0.0450, -0.6665],
[-0.0515, -0.7969, 0.5981, 0.8004]])
当然,你可以说torch.sin(x)不是你需要的那个定义,但那个可以自己修改
【在 f****i 的大作中提到】 : tensorflow不涉及sin(x),cos(x),exp(x)的变量x成为矩阵的情况
|
f****i 发帖数: 1 | 24 对,现在你终于涉及到问题核心了
如果我有个老程序,sin(x)全是数字,
我现在要修改成sin(x)可以是数字也可以是矩阵,
如果是cpp,我可以不用修改程序体,只要前面修改下
加减乘除和基本函数定义就可以了,当x是数字时程序
自动调用通常sin(x),如果x是矩阵的时候,程序
自动调用我新定义的sin(x)
但是
python不能自动识别函数,所以你得修改程序体,加入
人工if语句,如果程序一大,你根本不知道哪里漏掉了,
所以,python是不可取的
我说了半天,你明白问题的核心了吗?
你的tensorflow从来没有遇到过继承升级,所以体会不到这种局限造成的麻烦
【在 d*****u 的大作中提到】 : 同学,你不要学弃婴不懂装懂好不好 : 那是东施效颦 : 我还就给你试了一下 : In [1]: import torch : In [2]: x = torch.randn(2,4) : In [3]: x : Out[3]: : tensor([[ 0.3378, -1.9106, -0.0450, -0.7296], : [-0.0515, -0.9221, 0.6412, 0.9279]]) : In [4]: torch.sin(x)
|
d*****u 发帖数: 17243 | 25 我刚才展示的是Pytorch
人家开发者都把实数、向量和张量的正弦函数都给你写好了,用同一个函数名都可以调用
你还要啥?
C++无非也就是那样,最先有人写好了各种输入对应的算法(其中用到重载),然后用
户就直接调用
如果用户有特殊要求可以自己写
【在 f****i 的大作中提到】 : 对,现在你终于涉及到问题核心了 : 如果我有个老程序,sin(x)全是数字, : 我现在要修改成sin(x)可以是数字也可以是矩阵, : 如果是cpp,我可以不用修改程序体,只要前面修改下 : 加减乘除和基本函数定义就可以了,当x是数字时程序 : 自动调用通常sin(x),如果x是矩阵的时候,程序 : 自动调用我新定义的sin(x) : 但是 : python不能自动识别函数,所以你得修改程序体,加入 : 人工if语句,如果程序一大,你根本不知道哪里漏掉了,
|
f****i 发帖数: 1 | 26 数值计算中最美妙的feature啊
省了不知多少麻烦 |
a*****V 发帖数: 1 | 27 赶紧问个问题,有人用PHP做过张量运算吗? 先谢. |
f****i 发帖数: 1 | 28 python的overloading只有半截
python不能自动根据变量类型解析函数
cpp是完全的overloading
这对计算程序维护升级极为重要
你从来没用到过,
以为终于他妈的抓住小辫子了
可以反击了
他妈的,
禽兽之变诈几何?
调用
【在 d*****u 的大作中提到】 : 我刚才展示的是Pytorch : 人家开发者都把实数、向量和张量的正弦函数都给你写好了,用同一个函数名都可以调用 : 你还要啥? : C++无非也就是那样,最先有人写好了各种输入对应的算法(其中用到重载),然后用 : 户就直接调用 : 如果用户有特殊要求可以自己写
|
f***n 发帖数: 4682 | 29 这些活Matlab都给你干了 干嘛用c++
【在 f****i 的大作中提到】 : 看来你虽身为码农,对计算也是屁都不懂 : 之所以用c++,是因为可以实现运算符重载,这对大规模数值计算极为重要 : 比如,一个2维的偏微分方程,我们可以写成矩阵形式: : dx/dt=f(x), : 这里x是2维矩阵,f(x)是2维矩阵x的函数 : 我现在写好了2维情况的程序,要把它扩展到3维,你要是用java python写就彻底完蛋 : 了,你得重写,软件一大你得浪费好几年时间。 : 但是c++下你可以定义全新的运算符重载,加法可以准对数字,也可以准对矩阵,软件 : 自动适应,这样你扩展到3维只需要更改下x的定义就可以了,根本不需要全部重写。
|
d*****u 发帖数: 17243 | 30 另外现在所谓深度学习里也经常用正弦函数来表征一个序列的相对位置
比如一个句子是[W0, W1...Wn]
W1是一个词向量,常用512维,总共是512*n维(忽略batch)
但这里有个问题就是词在序列中的位置是绝对位置,是一个噪音
而语言看重的是相对位置
于是我们给每个词向量加上另一个512维的向量
[[sin(omega_0*0), sin(omega_0*1), sin(omega_0*2)...sin(omega_0*n)],
[[sin(omega_1*0), sin(omega_1*1), sin(omega_1*2)...sin(omega_1*n)],
...
]
这叫Positional embedding
现在几乎所有的sequence to sequence model都用
【在 f****i 的大作中提到】 : 数值计算中最美妙的feature啊 : 省了不知多少麻烦
|
|
|
f****i 发帖数: 1 | 31 我在说的是,把原来数字x的sin(x)升级到矩阵x的sin(x)
你再说把原来100维的x升级成10000维x
这是两个数量级的问题,ok?
【在 d*****u 的大作中提到】 : 另外现在所谓深度学习里也经常用正弦函数来表征一个序列的相对位置 : 比如一个句子是[W0, W1...Wn] : W1是一个词向量,常用512维,总共是512*n维(忽略batch) : 但这里有个问题就是词在序列中的位置是绝对位置,是一个噪音 : 而语言看重的是相对位置 : 于是我们给每个词向量加上另一个512维的向量 : [[sin(omega_0*0), sin(omega_0*1), sin(omega_0*2)...sin(omega_0*n)], : [[sin(omega_1*0), sin(omega_1*1), sin(omega_1*2)...sin(omega_1*n)], : ... : ]
|
d*****u 发帖数: 17243 | 32 你先确定你要说什么吧
你要说python无法实现运算符重载,
我已经举例可以了,还写了一个加号重载的具体例子
你要说python的库无法适应各种输入类型的变化
我已经告诉你不是那样,那些库都已经很灵活
而且你还可以自己customize
【在 f****i 的大作中提到】 : python的overloading只有半截 : python不能自动根据变量类型解析函数 : cpp是完全的overloading : 这对计算程序维护升级极为重要 : 你从来没用到过, : 以为终于他妈的抓住小辫子了 : 可以反击了 : 他妈的, : 禽兽之变诈几何? :
|
d*****u 发帖数: 17243 | 33 pytorch里对1维,n维,和n*m*k维的输入都是一个sin函数
【在 f****i 的大作中提到】 : 我在说的是,把原来数字x的sin(x)升级到矩阵x的sin(x) : 你再说把原来100维的x升级成10000维x : 这是两个数量级的问题,ok?
|
d*****u 发帖数: 17243 | 34 In [6]: real = torch.randn(1)
In [7]: vector = torch.randn(2)
In [8]: matrix = torch.randn(2,2)
In [9]: tensor_ = torch.randn(2,2,2)
In [10]: print(torch.sin(real), torch.sin(vector), torch.sin(matrix), torch.
sin(tensor_))
tensor([0.1719])
tensor([-0.9996, 0.2997])
tensor([[-0.5224, 0.5916],
[ 0.8910, -0.0087]])
tensor([[[ 0.4859, -0.6899],
[ 0.4010, 0.4967]],
[[-0.0812, -0.4114],
[ 0.9490, 0.8889]]])
【在 f****i 的大作中提到】 : 我在说的是,把原来数字x的sin(x)升级到矩阵x的sin(x) : 你再说把原来100维的x升级成10000维x : 这是两个数量级的问题,ok?
|
f****i 发帖数: 1 | 35 四川佬的嘴太硬了
他妈的跟星光似的
我说的是,在不改动久经考验的老程序的情况下把老的程序升级
你这是从头写一个全新的程序,把一切脏活encapsulate到torch里面
你干吗不去看看torch里面怎么处理函数类继承的?
我给你一个老玩意,你得每个地方都修改成torch.xxx,这多大工作量?会有遗漏吗?
更大的问题是,计算出了结果,但是你能相信这结果是正确的吗??
torch.
【在 d*****u 的大作中提到】 : In [6]: real = torch.randn(1) : In [7]: vector = torch.randn(2) : In [8]: matrix = torch.randn(2,2) : In [9]: tensor_ = torch.randn(2,2,2) : In [10]: print(torch.sin(real), torch.sin(vector), torch.sin(matrix), torch. : sin(tensor_)) : tensor([0.1719]) : tensor([-0.9996, 0.2997]) : tensor([[-0.5224, 0.5916], : [ 0.8910, -0.0087]])
|
d*****u 发帖数: 17243 | 36 torch是很多优秀的程序员多年写成的神经网络包
pytorch则是Facebook这种大公司维护的
作为普通开发者当然就直接用
满足不了需要的就自己写
真正开发工具的或者使用工具的都不会去炫耀自己会写一个重载,吃饱了撑的
而且python里面工具很多,比如numpy也能实现上面的各种功能
而啥都不import的裸露python其实也包含了很多重载了
比如两个list是可以直接相加的,只不过加出来的效果是拼接
两个set也可以直接相减,减出来的效果是去掉交集,等等
【在 f****i 的大作中提到】 : 四川佬的嘴太硬了 : 他妈的跟星光似的 : 我说的是,在不改动久经考验的老程序的情况下把老的程序升级 : 你这是从头写一个全新的程序,把一切脏活encapsulate到torch里面 : 你干吗不去看看torch里面怎么处理函数类继承的? : 我给你一个老玩意,你得每个地方都修改成torch.xxx,这多大工作量?会有遗漏吗? : 更大的问题是,计算出了结果,但是你能相信这结果是正确的吗?? : : torch.
|
f****i 发帖数: 1 | 37 所以啊,人也认识到python的不足,
我说了python只是半个overloading,
几十年前设计python的时候觉得cpp的overloading太鸡巴绕脑子,
于是把它阉割了,没料到几十年后会用到这么复杂的运算,
于是有人写了torch
当然,torch也很麻烦,sin必须写成torch.sin,
让人一看,这都啥玩意啊
【在 d*****u 的大作中提到】 : torch是很多优秀的程序员多年写成的神经网络包 : pytorch则是Facebook这种大公司维护的 : 作为普通开发者当然就直接用 : 满足不了需要的就自己写 : 真正开发工具的或者使用工具的都不会去炫耀自己会写一个重载,吃饱了撑的 : 而且python里面工具很多,比如numpy也能实现上面的各种功能 : 而啥都不import的裸露python其实也包含了很多重载了 : 比如两个list是可以直接相加的,只不过加出来的效果是拼接 : 两个set也可以直接相减,减出来的效果是去掉交集,等等
|
d*****u 发帖数: 17243 | 38 你可以from torch import sin
然后程序里直接写sin就行
只是一般不建议,容易搞混
【在 f****i 的大作中提到】 : 所以啊,人也认识到python的不足, : 我说了python只是半个overloading, : 几十年前设计python的时候觉得cpp的overloading太鸡巴绕脑子, : 于是把它阉割了,没料到几十年后会用到这么复杂的运算, : 于是有人写了torch : 当然,torch也很麻烦,sin必须写成torch.sin, : 让人一看,这都啥玩意啊
|
m********e 发帖数: 1156 | 39 好维护是很重要的。
【在 f****i 的大作中提到】 : 对,现在你终于涉及到问题核心了 : 如果我有个老程序,sin(x)全是数字, : 我现在要修改成sin(x)可以是数字也可以是矩阵, : 如果是cpp,我可以不用修改程序体,只要前面修改下 : 加减乘除和基本函数定义就可以了,当x是数字时程序 : 自动调用通常sin(x),如果x是矩阵的时候,程序 : 自动调用我新定义的sin(x) : 但是 : python不能自动识别函数,所以你得修改程序体,加入 : 人工if语句,如果程序一大,你根本不知道哪里漏掉了,
|