2

MatLab にサンプル マトリックスがあります。

>> A=[0 0 0 0; 5 1 4 6; 10 87 74 34]

A =

     0     0     0     0
     5     1     4     6
    10    87    74    34

最初の列のない A の要素を持つ新しいベクトルを作成したいと思います。さらに、各要素 (行 1、列 2 から開始) は 1 つの列にのみ配置されます。したがって、ターゲット ベクトルは次のとおりです。

newdata=

        0
        0
        0
        1
        4
        6
        87
        74
        34

m-fileそれを行うことが想定されているを作成しましたが、得られるのはベクトルだけです

newdata=

        34
        34
        34
        34
        34
        34
        34
        34
        34

私のコードは

newdata=zeros(size(A,1)*(size(A,2)-1),1);
for ii=1:size(A,1)
    for jj=2:size(A,2)
        for n=1:(size(A,1)*(size(A,2)-1))
            newdata(n)=A(ii,jj);
        end
    end
end

些細なことだとは思いますが、間違いが見つかりません。どんな助けでも大歓迎です!

4

4 に答える 4

3

まず第一に、あなたの間違いはn、最も内側のループとして記述したことです。そのnewdataため、要素ごとに何度も上書きされます(もちろん、最初の列のエントリを除く)。第二に、これは非常に非効率的な方法です。MATLAB のcolon演算子を利用する必要があります。これは次のように行うことができます。

A=A(:,2:end);  %removing first column
A=A.';
newdata=A(:); %collapsing it to a vector and the transpose was done 
%to get the desired format of the vector `newdata`. You are welcome to 
%try the code without transpose and see what difference it makes. 
于 2013-04-28T08:48:54.927 に答える
3

あなたの主な「間違い」は、車輪を再発明しようとしているということです。

最初のステップは、最初の列を取り除くことです。

B = A(:,2:end)

最後に、マトリックスを再形成します。

B = reshape(B.',1,[])'

独自のコードを記述する必要はありません。その方が楽だと思います。

于 2013-04-28T08:49:19.380 に答える