matlab矩阵内存预分配

matlab矩阵内存预分配就意味着,划定一个固定的内存块,各数据可直接按“行、列指数”存放到对应的元素中。若矩阵中不预配置内存。则随着“行、列指数”的变大。MATLAB就必须不断地为矩阵找到新的“空的内存”,从而导致“建造矩阵”的速度大大下降。

Hilbert矩阵的数学描写叙述

Hilbert矩阵是著名的“坏条件”矩阵,当中其第(i,j)元素的表达式是a(i,j)=1/(i+j-1)。

代码比較:

% 2014-11-8
% Hilbert矩阵的数学描写叙述

clear
tic                     %启动秒表计时
K=1000;
for ii=1:K              %下面创建(K*K)矩阵
    for jj=1:K

        A1(ii,jj)=1/(ii+jj-1);

    end

end
toc                     %输出第一种方法耗时

tic
A2=zeros(K,K);          %给矩阵预先配置内存空间
for ii=1:K

    for jj=1:K
    A2(ii,jj)=1/(ii+jj-1);
    end
end
toc                     %另外一种方法耗时

tic
II = repmat(1:K,K,1);   %在矩阵的每行元素里设置“列指数”
JJ = II';               %在矩阵的没列元素里设置“行指数”
A3 = 1./(II+JJ-1);      %採用数组除。获得Hilbert矩阵
toc                     %第三中方法耗时

输出结果:

Elapsed time is 1.903465 seconds.
Elapsed time is 0.010740 seconds.
Elapsed time is 0.037265 seconds.

通过以上分析,可见矩阵内存预分配效果还是非常好的,可是必须指出并非全部的循环都可与量化的。

时间: 2024-10-19 21:54:36

matlab矩阵内存预分配的相关文章

matlab————矩阵输出到txt

matlab如何输出矩阵到txt并指定数的精度 (2013-11-20 16:50:43)转载▼ 标签: matlab 输出数据 假设你的数据矩阵为a; [m n] = size(a); [filename pathname] = uiputfile{'*.txt','Select Save file'); if ~filename return; else str = [pathname filename]; fin = fopen(str,'wt'); for i = 1:m for j =

matlab矩阵合并及相关运算

1.matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的. a=rand(2,3): b=rand(2,3): c=[a;b]: d=[a,b]: c的结果是将b整体合并到a 的下边,而d的结果是整体将b合并到a 的右边. 2.创建等差向量组 a=[1:2:11] 注意涉及到向量内部对应数据之间的运算时一定要用点运算符号,(.)例如,求表达式b=a^2时应该写作 b=a.^2 也可以利用linspace来创建等差向量,linspace

matlab矩阵操作

1:求行数  nrow=size(matrix,1); 2:求列数  ncol=size(matrix,2); 3:矩阵合并 c1=[m1,m2]横向合并  c2=[m1;m2]纵向合并 m1= [5     2     3] ; m2=[1     2     3]; c1 =[5     2     3     1     2     3]; c2 =[ 5 2 3 1 2 3 ] matlab的下标从1开始,取matlab的元素直接用m[index]即可 取子矩阵 m[r1:rn,:]  

Matlab 的内存分配机制

1.创建和修改数组——基本思想是保持内存的连续性 (1)当为数组赋值时,Matlab在内存中分配连续的虚拟块,在另一个地方,将数组的类型和维数等保存为头信息. (2)当向数组增加新元素时,如果原来位置的连续内存区域可以容纳新增加的数据,则扩大分配的内存,然后增加元素:如果连续块不够大,需要先重新分配能够容纳原有数据和新增数据的连续内存块,再将原有数据拷贝到新分配的内存中(在此期间,内存中会有原来数据的两份拷贝,增加了out of memory的风险),并添加新的元素到新的块中,然后释放原来的内存

Matlab矩阵基本操作(定义,运算)

转自:http://blog.csdn.net/perfumekristy/article/details/8119861 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间用”;”(或回车符)隔开: d.矩阵的元素可以是数值.变量.表达式或函数: e.矩阵的尺寸不必预先定义. 二,矩阵的创建: 1.直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则.建立向

matlab矩阵的表示和简单操作

原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则:a.矩阵元素必须在"[ ]"内:b.矩阵的同行元素之间用空格(或",")隔开:c.矩阵的行与行之间用";"(或回车符)隔开:d.矩阵的元素可以是数值.变量.表达式或函数:e.矩阵的尺寸不必预先定义. 二,矩阵的创建:1.直接输入法最简单的建立矩阵的方法是从键盘直接输

numpy线性代数基础 - Python和MATLAB矩阵处理的不同

http://blog.csdn.net/pipisorry/article/details/39087583 在介绍工具之前先对理论基础进行必要的回顾是很必要的.没有理论的基础,讲再多的应用都是空中楼阁.本文主要设涉及线性代数和矩阵论的基本内容.先回顾这部分理论基础,然后给出MATLAB,继而给出Python的处理.个人感觉,因为Python是面向对象的,操纵起来会更接近人的正常思维:而MATLAB大多是以函数实现的,是向对象施加的一个操作.比如,A是一个矩阵,它有一个属性attr.用Pyth

Matlab 矩阵卷积理解(转载)

转载自:http://blog.csdn.net/andrewseu/article/details/51783181 在图像处理的过程中,经常会看到矩阵卷积的概念,比如说用一个模板去和一张图片进行卷积,因此很有必要了解矩阵卷积到了做了什么,具体又是怎么计算的. 在matlab中有conv2函数对矩阵进行卷积运算,其中有一个shape参数,取值具体有三种: -full - (default) returns the full 2-D convolution, -'same' - returns

sds(简单动态字符串) 内存预分配优化策略

在眼下版本号的 Redis 中, SDS_MAX_PREALLOC 的值为 1024 * 1024 , 也就是说. 当大小小于 1MB 的字符串运行追加操作时,sdsMakeRoomFor 就为它们分配多于所需大小一倍的空间: 当字符串的大小大于 1MB . 那么 sdsMakeRoomFor 就为它们额外多分配 1MB 的空间. 运行过 APPEND 命令的字符串会带有额外的预分配空间. 这些预分配空间不会被释放. 除非该字符串所相应的键被删除, 或者等到关闭 Redis 之后, 再次启动时又