Matlab二维数组索引for循环和矢量化版本

时间:2015-07-06 15:18:30

标签: matlab for-loop indexing vectorization

我知道这里有很多索引问题,但是这个问题对我来说似乎很困惑,希望有人能快速回答我的问题,但是会理解这个问题是否会被删除。我有一个2D a-by-b数组x并希望从另一个数组得到这个:

for i=1:b        
x(:,i) = y( (i-1) * k+1 : (i-1) * k+a )
end

没有for循环,如下所示:

x(:,1:b) = y( (0:b-1) * k+1 : (0:b-1) * k+a )

但无济于事,我得到了

“订阅的分配维度不匹配。”

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

你不能只是在矢量化中翻译for循环

当你这样做时

vector : n

实际上,MATLAB做了

vector(1):n

这就是你的矢量化错误的地方。

答案 1 :(得分:1)

b=10,并假设' a'可以是标量,(k*a) = 3;

x(:,1:10) = y( (0:10-1) * 3 : (0:10-1) * 3);

无论什么' y'等于,等式的右边是一个标量,并且由于你没有循环,你只需要替换前面的10个值x' x'用相同的数字:

例如x(:,1:10) = 116 116 116 116 116 116 116 116 116 116

如果没有循环

,则无法迭代索引

答案 2 :(得分:1)

您似乎可以使用bsxfun创建这些线性索引并将索引编入y以获得所需的输出 -

x = y(bsxfun(@plus,[1:a]',[0:b-1]*k))