Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 展开稠密矩阵_Fortran_Fortran90 - Fatal编程技术网

Fortran 展开稠密矩阵

Fortran 展开稠密矩阵,fortran,fortran90,Fortran,Fortran90,在FORTRAN中用新列扩展密集矩阵最有效的方法是什么 假设T是稠密矩阵m乘n 我想用m乘以n+1。 我能想到的一个策略是:在每一步重新分配并分配最后一列,还是有更好的方法,比如在开始之前分配一些空间,检查是否足够,如果不够的话,进行重新分配之类的工作?有什么想法吗?如果你有一个Fortran 2003编译器,你可以使用move\u alloc:如果你有一个Fortran 2003编译器,你可以使用move\u alloc:假设m和n在某种意义上不是非常大,这样你的矩阵就可以放入内存,你想要的是

在FORTRAN中用新列扩展密集矩阵最有效的方法是什么

假设T是稠密矩阵m乘n

我想用m乘以n+1。

我能想到的一个策略是:在每一步重新分配并分配最后一列,还是有更好的方法,比如在开始之前分配一些空间,检查是否足够,如果不够的话,进行重新分配之类的工作?有什么想法吗?

如果你有一个Fortran 2003编译器,你可以使用move\u alloc:

如果你有一个Fortran 2003编译器,你可以使用move\u alloc:

假设
m
n
在某种意义上不是非常大,这样你的矩阵就可以放入内存,你想要的是及时的性能,我要做的是分配一个大矩阵,并分别存储实际大小。例如,这就是BLAS库用作“前导维度”的内容。然后,当需要添加列时,检查实际大小是否仍然小于最大大小,并在必要时重新分配内存

假设
m
n
在某种意义上并不是太大,所以你的矩阵可以放入内存中,你所追求的是及时的性能,我要做的是分配一个大矩阵,并单独存储实际大小。例如,这就是BLAS库用作“前导维度”的内容。然后,当需要添加列时,检查实际大小是否仍然小于最大大小,并在必要时重新分配内存

您是否有机会尝试从MATLAB翻译一些代码(:,end+1)?总之,简而言之,它并没有那么有效。事实上,这是一个相当昂贵的操作。确切地说,我知道在Matlab中它也是低效的,例如用向量v展开A,但是我猜想C++向量结构现在看起来是一个更好的选择,现在把向量存储在向量中,这样也可以做这个操作。无论如何,这将是一种方式。(最好通读全文)您是否有机会尝试从MATLAB翻译一些代码(:,end+1)?总之,简而言之,它并没有那么有效。事实上,这是一个相当昂贵的操作。确切地说,我知道在Matlab中它也是低效的,例如用向量v展开A,但是我猜想C++向量结构现在看起来是一个更好的选择,现在把向量存储在向量中,这样也可以做这个操作。无论如何,这将是一种方式。(最好通读整条线索)也许有一个这样的例子?是的,好的,这也是我所想的,我猜这将是最有效的方法that@Rook:事实上,我喜欢。几年前,我在编写一个蒙特卡罗代码,其中的一个基本更新是在矩阵中添加/删除行和列(矩阵的典型大小为数千)。由于它是MC代码,您无法在每一步上重新分配内容。@Umut Tabak:BTW,这取决于您将如何处理这些矩阵,你可以从线性代数中找到一些有用的事实。查找Sherman Morrison或Woodbury公式,和/或查看数字配方中的“稀疏矩阵”章节。@Zhenya,这些指针与扩展密集矩阵的列大小有什么关系?不管怎样,使用C++矩阵库是一个更好的选择,一个向量会在STL上优化分配。这个例子可能是这样的吗?是的,这就是我的想法,我猜这是最有效的方法。that@Rook:事实上,我喜欢。几年前,我在编写一个蒙特卡罗代码,其中的一个基本更新是在矩阵中添加/删除行和列(矩阵的典型大小为数千)。由于它是MC代码,您无法在每一步上重新分配内容。@Umut Tabak:BTW,这取决于您将如何处理这些矩阵,你可以从线性代数中找到一些有用的事实。查找Sherman Morrison或Woodbury公式,和/或查看数字配方中的“稀疏矩阵”章节。@Zhenya,这些指针与扩展密集矩阵的列大小有什么关系?不管怎样,使用C++矩阵库是一个更好的选择,向量将在STL上优化分配。