需要一种快速的方法来在matlab中进行计算

时间:2016-06-04 18:25:42

标签: matlab

我需要通过这样的矢量重塑以下矩阵。 没有for循环。

enter image description here

。为了制作矩阵,我需要以相同的顺序放置向量的元素,然后我移动一个元素并再次写入。

2 个答案:

答案 0 :(得分:4)

只需使用索引然后重塑

mymat = reshape(myvec([1:5 2:6 3:7]),[],3);

进一步自动化

myvec = 99:-1:80; % Some vector 
number_of_columns = 4;
window_length = 5;

ind = kron(ones(number_of_columns,1),[1:window_length]') + ...
    kron([0:number_of_columns-1]',ones(window_length,1));
Mymat = reshape(myvec(ind),[],number_of_columns);

答案 1 :(得分:1)

天真的实现将使用简单的循环和数组切片,例如:

tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
w = 3 
n = length(tab)
output = []
for i = 1:n - w +1 
  output(i,:) = tab(i:i+w-1)'
end 

您还可以使用 hankel 矩阵来避免循环。

tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
n = length(tab)
w = 3

han = hankel(1:length(tab), 1:3)

output = []
arrayfun(@(x) tab(x),han(1:n-w+1,:))

但是,如果您不是一个非常快速的实现,您可以使用来自图像处理调色板的滑动窗口功能映射,例如 colfilt