我预先分配矩阵会在MATLAB中出现内存错误

vie*_*iew 1 memory matlab

我使用零来初始化我的矩阵,如下所示:

height  = 352
width   = 288
nFrames = 120
imgYuv=zeros([height,width,3,nFrames]);
Run Code Online (Sandbox Code Playgroud)

但是,当我将nFrames的值设置为大于120时,MATLAB会给出一条错误消息,说明内存不足.

原来的功能是

[imgYuv, S, A]= changeYuv(fileName, width, height, idxFrame, nFrames)
Run Code Online (Sandbox Code Playgroud)

我的命令是

[imgYuv,S,A]=changeYuv('tilt.yuv',352,288,1:120,120);
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里发生了什么?

PS:该功能的目的之一是加载一个超过2000帧的yuv视频.有可能实现吗?

Jon*_*nas 5

有三种方法可以避免错误

  1. 在任何给定时间处理有限数量的帧.
  2. 使用整数数组.大多数电影都是8位格式,而Matlab通常使用doubles. uint8每个元素占用1个字节,double占用8个字节.因此,如果你创建你的数组B = zeros(height,width,3,nFrames,'uint8`,它只使用内存的1/8.这可能适用于120帧,但对于2000帧,你将再次遇到麻烦.请注意,并非所有Matlab函数都适用于整数数组; 你可能不得不重新实现那些需要加倍的东西.
  3. 购买更多内存.