2016-10-03 12 views
0

ある配列から別の配列へ特定の順序で値を入れようとしています。しかし、それらは元の配列と同じ次元に配置されます。私cStateこのdemension行列のデメンションを操作する

2 8 5 4 5 0 9 1 6

代わりの

2  8  5 

4  5  0 

9  1  6 

は、私は何をする必要があります。このdemensionであるために、私は期待してい何

nodeState = [2 8 5; 1 6 4; 9 0 5]; 

cState = []; 

cState = [nodeState(1,1) nodeState(1,2) nodeState(1,3) 
        nodeState(2,3) nodeState(3,3) nodeState(3,2) 
        nodeState(3,1) nodeState(2,1) nodeState(2,2)]; 

はありますか?

答えて

3

宣言を複数の行に分割する場合は、...を使用する必要があります。それ以外の場合、Matlabはキャリッジリターンを新しい行として解釈し、ベクトルの代わりに行列を作成します。

だけで実行します。

cState = [nodeState(1,1) nodeState(1,2) nodeState(1,3) ... 
      nodeState(2,3) nodeState(3,3) nodeState(3,2) ... 
      nodeState(3,1) nodeState(2,1) nodeState(2,2)]; 
+0

うわー、これはそれです!初心者のドキュメントに入れておく必要があります。 – Jam1

+0

@ Jam1実際には、見つけるのは少し難しいですが、https://www.mathworks.com/help/matlab/matlab_prog/symbol-reference.html#bsgigzp-29 - *定義配列*を参照してください。 – rayryeng

+1

本当にMatlabは、このような混乱を避けるために、ユーザにセミコロン ';'を使用して新しい行を開始させるべきだと思います。また、私の意見では、列を区切るためのスペースの使用を許可することは悪い考えです。ユーザーは、行列の値を書き込む際に、カンマ '、'とセミコロン ';を使用するように強制する必要があります。私は互換性の理由から彼らがそれをしないと思う、それはそれが既存のプログラムのトンを破るだろうから。 –