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))
我知道这里有很多索引问题,但这个问题让我感到困惑,希望有人能快速回答我,如果这个问题被删除,我会理解的。我有一个 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))