0

最初の要素が最後の要素になり、2 番目の要素が最初の要素になり、3 番目の要素が 2 番目の要素になるように、配列のすべての要素を左にシフトしようとしています。circshiftコマンドについては知っていますが、 for ループを使用してこれを行います。

これが私がしたことです。

old=[]
n=length(old)
for i=1;i<(n-1);i=i+1;
    for j=2;j<n;j=j+1;
        new(j)=old(i)
    end
end 

しかし、もちろんうまくいきませんでした。n を指定せずに n 要素の配列を作成する方法がわかりません。そのため、old=[] を使用しましたが、0 要素の配列が作成されたと思います。

このコードを機能させるにはどうすればよいですか?

4

2 に答える 2

2

したがって、最初のステップは、Matlabでforループを指定する方法を学ぶことです。これは、C構文のようなものです。これはMatlab構文ではありません。

以下は、forloopsを使用してそれを行う方法ですが、これは適切なMATLABプログラミングではありません。ループなしでも簡単にできます。

vec = 1:10;
temp = [];
shiftby = 2;

for ii = 1:shiftby %Each iteration shifts by one
    temp = vec(end); %Store the last element of vec
    for jj = size(vec, 2):-1:2; %inner loop must shift each element from the end to element 2
        vec(jj) = vec(jj-1);
    end
    vec(1) = temp; %put the old end value at the beginning
end  

しかし、これを行うこともできます。これは、コード化するためのはるかにマトラベスクな方法です。

vec = [vec(end - shiftby + 1: end), vec(1:end - shiftby)]
于 2013-02-13T15:25:04.037 に答える
2

n配列の長さを指定したくない場合は、関数の入力引数として指定する必要があります。たとえば、次のようなことができます。

function new = shiftLeft(old)
n = length(old);

for i =1:n
new(i) = old(mod(i,n)+1);
end

return

したがって、これを使用すると、たとえば配列がある場合、次のold = [1 2 3 4];ようなものを取得できますnew = [2 3 4 1];

mod(a,b)剰余演算子です。 と入力すると、詳細情報が表示されますhelp mod

于 2013-02-13T15:26:34.160 に答える