让我问一下,使用Matlab解决我的特定问题是无意义的还是有些人做了类似的事情。
我有一个初始序列S(1)
,其中每个术语都是一个2D点。
我通过插入新的术语点S(2)
来创建新序列p
在每个连续的2个学期点p(i)
和p(i+1)
之间。
其中p
是f
上最近索引的4个术语点的函数S(2)
。
即,
p= f( p(i-1),p(i),p(i+1),p(i+2) )
函数f
以类似C的风格编写
但不是纯粹的矩阵语言风格。
以同样的方式,我重复生成新的较长序列S(i+1)
,直到S(m)
。
上述内容可能含糊不清,但请提出一些建议。 我不问Matlab是否是问题的最佳选择,但是否专家不会使用Matlab来解决这个问题,或者某些问题。
提前谢谢。
答案 0 :(得分:2)
这在很大程度上取决于f
。如果f
可以在Matlab中高效编码,或者你愿意花时间去MEX它(Matlab C扩展),那么Matlab将会有效地执行。
代码可以像这样进行矢量化:
f = @(x) mean(x,3);
m=3;
S{1}=[1,2,3;4,5,6];
for i=2:m
S{i} = cat(3,...
[[0;0] S{i-1}(:,1:end-2)],...
S{i-1}(:,1:end-1),...
S{i-1}(:,2:end),...
[S{i-1}(:,3:end) [0;0]]);
S{i} = [f(S{i}) [0;0]];
S{i} = cat(3,S{i-1},S{i});
S{i} = permute(S{i},[1 3 2]);
S{i} = S{i}(:,:);
S{i}(:,end)=[];
end
答案 1 :(得分:1)
是的,Matlab似乎适合这样的任务。对于序列列表的数据结构,请考虑使用cell arrays。您可以将S
作为单元格数组,S{1}
将对应于您的S(1)
,并且可能再次成为点的单元格数组,或者如果点数只是对或三元组,则为常用矩阵数字。
作为替代方案,我认为Python在所有类型的序列方面都非常强大。