2017-05-01 3 views
1

だから、配列を複数の変数に分解したい。 たとえば、 私はダブルタイプの(136,9)サイズの 'データ'配列を持っています。 私は、1(データの値を分解したい:)複数の変数に以下のようなもの:配列を変数に分解するPythonの方法

[frm_id,seq_id,xmin,ymin,w,h,temp1,temp2,temp3] = data(1,:); 

をPythonで、それは簡単だったが、上記のコードMathWorks社のMATLABで次のエラーを与える:

Insufficient number of outputs from right hand side of equal sign to satisfy 
assignment. 

私は何かのように行くことができる

frm_id = data(1,1); 
seq_id = data(1,2); 
%ect 

しかし、私はこの操作を行うには、matlab(もっときちんとした)方法があると思います。

ありがとうございます!

+1

I hav Matlabのようなことは見ないでください。なぜfrm_id = data(1,1)ですか? seq_id = data(1,2); 'OKではありませんか?それはきれいに見えないので? – Anthony

+0

うん、データ(j、インデックス)を9回書く必要があります:)。だから私はもっと素敵な何かを探しています –

+2

9つの列のそれぞれを新しい配列に割り当てる場合は、9つの割り当てを記述する必要があります。たぶん、別のデータ構造を使うことを考えれば、一度だけ書く必要がありますか? – jenszvs

答えて

4

にあなたはその後、セル配列に行列を変換するnum2cellを使用することができますセルの内容を各変数にコピーする:

C = num2cell(data,1); 
[frm_id,seq_id,xmin,ymin,w,h,temp1,temp2,temp3] = C{:}; 
+0

セル配列がこのように使用できることはわかりませんでしたが、それは素晴らしいです。私の心の中でちょうど思考。関数の基本的な戻り値はセル型ですか? – Anthony

+0

@Anthonyどの機能? num2cellの戻り値は、セルタイプです。 – rahnema1

+0

任意の関数です。私は自分の質問が既に話題外であることに気づいた。 – Anthony

1

私はこのような関数を作成することをお勧めすることができます:

function [frm_id,seq_id,xmin,ymin,w,h,temp1,temp2,temp3] = myfunction (data) 

frm_id = data(:,1); 
seq_id = data(:,2); 
xmin = data(:,3); 
ymin = data(:,4); 
w = data(:,5); 
h = data(:,6); 
temp1 = data(:,7); 
temp2 = data(:,8); 
temp3 = data(:,9); 

ので、あなたのメインのコード

[frm_id,seq_id,xmin,ymin,w,h,temp1,temp2,temp3] = myfunction(data);

関連する問題