p*********t 发帖数: 2690 | 1 matlab先是用fortran写的,所以用了列优先存储。后来用c改写了matlab之后,怎么还
是用的列优先存储?难道列优先存储适合于矩阵运算? |
x*******1 发帖数: 28835 | 2 matlab就是一个壳,什么C阿,fortran阿,就是掉lapack |
p*********t 发帖数: 2690 | 3 为啥matlab一直用列优先存储来存储array? 谁能讲讲这个列优先存储的来龙去脉?
【在 x*******1 的大作中提到】 : matlab就是一个壳,什么C阿,fortran阿,就是掉lapack
|
l********a 发帖数: 1154 | 4 好像没啥大区别,因为早期的一些fortran库都是column major的 |
t****t 发帖数: 6806 | 5 你应该问, 为啥C用行优先存储? 明明是fortran先来的.
【在 p*********t 的大作中提到】 : 为啥matlab一直用列优先存储来存储array? 谁能讲讲这个列优先存储的来龙去脉?
|
p**o 发帖数: 3409 | 6 MATLAB用C++封装了Intel MKL的BLAS/LAPACK。
MKL是Fortran写的,要求调用者遵循Fortran conventions,
比如传地址而不是传值,存储用column-major,等等。
【在 p*********t 的大作中提到】 : matlab先是用fortran写的,所以用了列优先存储。后来用c改写了matlab之后,怎么还 : 是用的列优先存储?难道列优先存储适合于矩阵运算?
|
N***m 发帖数: 4460 | 7 欧奏是不明白,按列和按行有啥实际区别吗?
【在 t****t 的大作中提到】 : 你应该问, 为啥C用行优先存储? 明明是fortran先来的.
|
t****t 发帖数: 6806 | 8 实际上没区别, 但是不兼容就是了.
【在 N***m 的大作中提到】 : 欧奏是不明白,按列和按行有啥实际区别吗?
|
N***m 发帖数: 4460 | 9 矩阵转置一下不行吗?
【在 t****t 的大作中提到】 : 实际上没区别, 但是不兼容就是了.
|
t****t 发帖数: 6806 | 10 转置又不是free的.
【在 N***m 的大作中提到】 : 矩阵转置一下不行吗?
|
|
|
N***m 发帖数: 4460 | 11 这就要怪那帮写程序的人了,没事搞两套系统干什么,吃饱了撑的阿。
【在 t****t 的大作中提到】 : 转置又不是free的.
|
n******t 发帖数: 4406 | 12 先骂搞CPU的为啥要搞两套endian先。。。lol
【在 N***m 的大作中提到】 : 这就要怪那帮写程序的人了,没事搞两套系统干什么,吃饱了撑的阿。
|
O*******d 发帖数: 20343 | 13 先骂为什么人要长左手右手。
【在 n******t 的大作中提到】 : 先骂搞CPU的为啥要搞两套endian先。。。lol
|
O*******d 发帖数: 20343 | 14 任何一件事,如果有两种左右分的做法,一定会有人把两种做法都做了,以显示自己与
众不同。 |
d*****l 发帖数: 8441 | 15 拜托,懂一点儿数学吧。
Array在数学上就是列向量。数学上对向量的定义很不幸就是列向量,而把
行向量定义为向量的转置。在此定义之下,矩阵大多情况下是表示为多个列向量的。
说白了,就是数学习惯问题。
要怪就只能怪线性代数和矩阵论中的约定俗成的东西比C语言出现的要早。
【在 p*********t 的大作中提到】 : matlab先是用fortran写的,所以用了列优先存储。后来用c改写了matlab之后,怎么还 : 是用的列优先存储?难道列优先存储适合于矩阵运算?
|
t****t 发帖数: 6806 | 16 事实上, matlab的核心运算库从来也没有改过, 不存在所谓"用C改写matlab"这种说法.
【在 d*****l 的大作中提到】 : 拜托,懂一点儿数学吧。 : Array在数学上就是列向量。数学上对向量的定义很不幸就是列向量,而把 : 行向量定义为向量的转置。在此定义之下,矩阵大多情况下是表示为多个列向量的。 : 说白了,就是数学习惯问题。 : 要怪就只能怪线性代数和矩阵论中的约定俗成的东西比C语言出现的要早。
|
p**o 发帖数: 3409 | 17
"array在数学上就是列向量" ——没有这种说法,因为数学里没有array的概念,
array是程序员的概念,只有一维、二维、三维…的说法,没有row/column的区分。
带row/column性质的数学概念是向量(vector)。
在线性代数里,只是在习惯上把不带转置符号的vector符号看作column vector而已,
而由于英语行书写的原则,定义一个column vector也是按row vector的转置来定义的:
x = [x_1, x_2, ..., x_m]'
不带转置的vector符号默认为column vector,主要是为了矩阵算子左乘表达的简洁,
如ABx=b,改成row vector和右乘也可,只是约定俗成的习惯而已。
【在 d*****l 的大作中提到】 : 拜托,懂一点儿数学吧。 : Array在数学上就是列向量。数学上对向量的定义很不幸就是列向量,而把 : 行向量定义为向量的转置。在此定义之下,矩阵大多情况下是表示为多个列向量的。 : 说白了,就是数学习惯问题。 : 要怪就只能怪线性代数和矩阵论中的约定俗成的东西比C语言出现的要早。
|
p**o 发帖数: 3409 | 18 matlab核心在80年代初的确自己用c重写过(那些库后来叫JACKPAC);
后来他们公司发现这样吃力不讨好,2000年重写了接口,封装了netlib的LAPACK。
参见:
http://www.mathworks.com/company/newsletters/news_notes/clevesc
目前的matlab支持若干个LAPACK实现,默认用的是Intel MKL的LAPACK。
在matlab的安装目录的bin目录下,可以找到cublas/mkl/acml的dll/so文件。
法.
【在 t****t 的大作中提到】 : 事实上, matlab的核心运算库从来也没有改过, 不存在所谓"用C改写matlab"这种说法.
|
t****t 发帖数: 6806 | 19 哦, 好吧, 我看的时候用的是atlas, 那个显然不是C写的...
【在 p**o 的大作中提到】 : matlab核心在80年代初的确自己用c重写过(那些库后来叫JACKPAC); : 后来他们公司发现这样吃力不讨好,2000年重写了接口,封装了netlib的LAPACK。 : 参见: : http://www.mathworks.com/company/newsletters/news_notes/clevesc : 目前的matlab支持若干个LAPACK实现,默认用的是Intel MKL的LAPACK。 : 在matlab的安装目录的bin目录下,可以找到cublas/mkl/acml的dll/so文件。 : : 法.
|