- 主题:Matlab里面获取一个矩阵的子矩阵是否拷贝内存?
复制了。和python不一样。
【 在 VShaka (昵称) 的大作中提到: 】
: 刚开始用matlab真摸不到头脑。
: 简单来说,A是一个10*10矩阵。如果令B=A;那么内存是否复制了一份?
: 又如,要执行A的子矩阵相乘,C=A(:,6:end)*A(:,6:end)',这个里面取子矩阵的时候,是否构造临时变量增加了内存消耗?
: ...................
--
FROM 112.47.160.*
应该是程序员关心的问题,为啥要把责任推给系统?
把用不到的程序段给删了呀。
【 在 VShaka (昵称) 的大作中提到: 】
: 永远复制?
: 还是发生改变才复制?
: 如果始终复制,那matlab岂不是会增加很多内存消耗,而且无法控制,这太不可思议了。
: ...................
--
FROM 112.47.160.*
matlab又不是弱智。一般计算已经优化到相当程度了。
你想了解的问题,属于编译原理。
【 在 VShaka (昵称) 的大作中提到: 】
: A = zeros(10,10);
: B = A(:,6:end)*A(:,6:end)';
: 一个矩阵的一部分取出作为一个子矩阵参与运算是时常发生的,比如上面的语句。那么这个构造子矩阵的临时对象A(:,6:end)是否拷贝了内存?
: ...................
--
FROM 112.47.161.*
太简单了,报错之后,改程序重新执行。
【 在 VShaka (昵称) 的大作中提到: 】
: 这不是优化问题,是必须要知道的。
: 打个比方,一个矩阵对角化,你可以不知道这个函数内部到底消耗多少内存(lapack一般是有估计公式的),但输入的矩阵是否被拷贝必须是知道的。
: 否则连基本的内存消耗都估计不出来,怎么提交计算?
: ...................
--
FROM 112.47.161.*