我知道这里有很多索引问题,但是这个问题对我来说似乎很困惑,希望有人能快速回答我的问题,但是会理解这个问题是否会被删除。我有一个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 )
但无济于事,我得到了
“订阅的分配维度不匹配。”
有什么想法吗?提前谢谢。
答案 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))