消除Matlab中的循环

Mat*_*Dog 4 matlab for-loop vectorization

这是一个简单的问题.以下嵌套for循环创建一个正弦波值数组.

N = 2^16;
for m = 1:10;
    for i = 1:N
        sine(m,i) = sin(2*pi*i./(8*2^m));
    end
end
Run Code Online (Sandbox Code Playgroud)

看起来我应该能够在不使用for循环的情况下创建这个数组,但我尝试了各种语法并且总是收到错误消息.提前感谢任何见解.

MeM*_*ndI 6

你可以bsxfun像这样使用:

sine = sin(bsxfun(@times, 2*pi*(1:2^16), 1./(8*2.^(1:10))' ));
Run Code Online (Sandbox Code Playgroud)

  • 你也可以这样说 - 'sin(bsxfun(@rdivide,2*pi*(1:2 ^ 16),(8*2.^(1:10))')); (3认同)

Nic*_*ick 5

请尝试以下方法:

ii = 1:2^16;
m  = [1./(2.^(1:10))].'% transpose

prefactor = 2 * pi / 8;

sine = sin(prefactor * m * ii);
Run Code Online (Sandbox Code Playgroud)

我执行矩阵乘法A*B,其中a是列向量大小nrows,B是行向量大小ncols,得到的矩阵的大小为nrows x ncols.因此m是列向量和ii行向量.