我的想法是使用一个包含5个元素的cell数组,并使用变量来索引下一个步骤中应该被覆盖的子数组。例如,像这样:
a = {ones(10),2*ones(10),3*ones(10),4*ones(10),5*ones(10)};
index = 1;
在下一步中,您可以编写到子数组中:
a{index} = 6*ones(10)
并增加索引,例如:
index = index+1
显然,有某种限制:
if(index > 5) % FIXED TYPO!!
index = 1;
end
这是给你的吗?
编辑: 另外需要注意的一点是条目的排序,因此始终会有一些条目被移动,但根据您如何使用数据,您可以根据变量index
来移动数据的使用。
编辑2: 我有另一个想法:在MATLAB中使用类。您可以使用句柄类来保存数据,从而仅使用缓冲区引用数据。这取决于您保存的数据(数据集有多大等)以及代码中需要进行多少次移位,这可能会使其速度更快。例如,请参见此处:Matlab -- handle objects
您可以使用简单的句柄类:
classdef Foo < handle
properties (SetAccess = public, GetAccess = public)
x
end
methods
function obj = foo(x)
obj.x = x;
end
end
end
将数据存储在其中:
data = [1 2 3 4];
foo = Foo(data);
然后只需将对象引用存储在循环缓冲区中。在发布的链接中,答案表明赋值bar = foo
不会复制对象,而是仅保留引用:
foo.x = [3 4]
disp(bar.x) % would be [3 4]
但是如上所述,我不知道由于面向对象的开销是否会更快。这可能取决于您的数据...以下是有关此的更多信息:http://www.matlabtips.com/how-to-point-at-in-matlab/
mod
命令可能更快且更紧凑。此外,该方法明确使用数组而不是单元数组。这意味着您无需修改现有代码或调用cell2mat
或等效操作——这将需要不必要的复制操作。 - Steve