for循环和矢量化版本之间的Matlab二维数组索引矛盾

Matlab 2D-array indexing contradiction between for loop and vectorised version

我知道这里有很多索引问题,但这个问题让我感到困惑,希望有人能快速回答我,如果这个问题被删除,我会理解的。我有一个 2D a-by-b 数组 x 并想从另一个数组 y 中得到这个:

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 )

但无济于事,我得到

"Subscripted assignment dimension mismatch."

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

你不能随便翻译矢量化中的 for 循环

当你

vector : n

其实MATLAB做的

vector(1):n

那是你的矢量化错误的地方。

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

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

无论 'y' 等于什么,等式右边都是一个标量,并且由于您没有循环遍历,您只需将 'x' 的前 10 个值替换为相同的数字:

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

不循环就不能迭代索引

看来您可以只使用 bsxfun 创建这些线性索引并索引到 y 以获得所需的输出,就像这样 -

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