use*_*685 39 arrays matlab matrix
我正在寻找一种在MATLAB中将大量可变数量的矩阵存储在数组中的方法.
有没有办法实现这个目标?
例:
for i: 1:unknown
myArray(i) = zeros(500,800);
end
Run Code Online (Sandbox Code Playgroud)
如果不知道数组的长度是多少,我可以根据需要修改附加信息.
更新:性能是我努力实现这一目标的主要原因.之前它曾将数据作为单个矩阵获取,实时显示,然后继续处理下一组数据.
我尝试使用多维数组,如下面Rocco所建议的那样,但是我的数据太大了以至于我用完了内存,我可能需要针对我的情况寻找另一种选择.当我尝试其他建议时会更新.
更新2:谢谢大家的建议,但是我应该预先指定,精度和速度都是这里的一个不可或缺的因素,在尝试三维数组并重新评估方法之前,我可能需要考虑回到原来的方法.用于导入数据.
Hos*_*Aly 71
使用单元格数组.这比3D阵列具有优势,因为它不需要连续的存储空间来存储所有矩阵.事实上,每个矩阵都可以存储在内存中的不同空间中,如果您的可用内存碎片化,这将使您免于内存不足错误.这是一个在单元格数组中创建矩阵的示例函数:
function result = createArrays(nArrays, arraySize)
result = cell(1, nArrays);
for i = 1 : nArrays
result{i} = zeros(arraySize);
end
end
Run Code Online (Sandbox Code Playgroud)
要使用它:
myArray = createArrays(requiredNumberOfArrays, [500 800]);
Run Code Online (Sandbox Code Playgroud)
并访问您的元素:
myArray{1}(2,3) = 10;
Run Code Online (Sandbox Code Playgroud)
如果您事先无法知道矩阵的数量,您可以简单地使用MATLAB的动态索引来使阵列尽可能大.性能开销将与单元阵列的大小成比例,并且不受矩阵本身大小的影响.例如:
myArray{1} = zeros(500, 800);
if twoRequired, myArray{2} = zeros(500, 800); end
Run Code Online (Sandbox Code Playgroud)
gno*_*ice 44
如果所有矩阵的大小都相同(即500x800),那么你可以制作一个3D数组:
nUnknown; % The number of unknown arrays
myArray = zeros(500,800,nUnknown);
Run Code Online (Sandbox Code Playgroud)
要访问一个数组,您将使用以下语法:
subMatrix = myArray(:,:,3); % Gets the third matrix
Run Code Online (Sandbox Code Playgroud)
您可以通过以下几种方式向myArray添加更多矩阵:
myArray = cat(3,myArray,zeros(500,800));
% OR
myArray(:,:,nUnknown+1) = zeros(500,800);
Run Code Online (Sandbox Code Playgroud)
如果每个矩阵的大小不同,则需要使用像Hosam建议的单元格数组.
编辑:我错过了关于内存耗尽的部分.我猜你的nUnknown相当大.您可能必须切换矩阵的数据类型(如果使用整数,则单个或甚至是uintXX类型).您可以在调用零时执行此操作:
myArray = zeros(500,800,nUnknown,'single');
Run Code Online (Sandbox Code Playgroud)