2017-02-15 6 views
1

私はいくつかのサポート情報、その後、最初の質問にジャンプします:Matlabの下部構造へのアクセスをベクトル化するにはどうすればよいですか?

motor(1).Voltage = 96.2; 
motor(2).Voltage = 48.0; 

processingStation(1).FeedstockMotor.Voltage = 96.2; 
processingStation(2).FeedstockMotor.Voltage = 48.0; 

を以下は、すべてのモーター電圧を与える:

[motor.Voltage] 

これはしない

は、私は次のようしていると仮定すべてのモータ電圧を与えます:

[processingStation.FeedstockMotor.Voltage] 

最初の出力[motor.Voltage]は、構造内のすべてのモーターの電圧を私に与えます。他のケースで同じ機能を使用するにはどうすればVoltageの値がFeedstockMotorprocessingStationにあるのかを比較しようとしていますか?

その後、私は、セットアップのようなものがあるデフォルトのモーター、簡単にできた、私はフィールドFeedstockMotor_Voltageの名前を変更し、同じ機能を得ることができることを実現しますが、排出モータが構成の同様のセットを持っている場合:

defaultMotor.Voltage = 48.0; 
defaultMotor.Torque = 100; 

など、そして私が作ることができます簡単にアサイン:

processingStation(1).FeedstockMotor = defaultMotor; 

私は、許容モーターの非常に小さなサブセットを持っているそれらのモータのセットアップ非常に詳細な構成にできるようにし、その後にできるようにしたいのですがそれらを使用してください。

私はまた、視覚的な傾向や他のHMIディスプレイのための操作トルク、電圧などのリストをすばやく得ることができるように、様々なセグメントにスライスしたいと思っています。私は必要なデータを得るために、すべてのprocessingStation要素をループする必要はありません。

+1

のように、この機能を使用することができますちょうどこの

function output = rgetfield(S, field) % Split the fieldname on "." parts = regexp(field, '\.', 'once', 'split'); output = [S.(parts{1})]; if numel(parts) > 1 % If there are more parts, recursively get them output = rgetfield(output, parts{2}); end end 

のようにこれらの下部構造にアクセスすることができます私のパス上の機能を持っていますこれらのアイデアをチェックしてください:http://stackoverflow.com/questions/7878534/vectorization-of-multi-level-indexing-of-structs-in-matlab –

+0

ありがとう@ジョン。あなたが投稿した質問への回答を見て、[読みやすい2つのライナー]を持っていることを決めました(http://stackoverflow.com/questions/42261541/how-can-i-vectorize-access-to-substructures-in- matlab?noredirect = 1#comment71707455_42261575)は、スクイズ(cell2mat(...))のような鈍い一本のライナーよりも私にとって価値があります。 – Chuck

答えて

1

最初にprocessingStation.FeedstockMotorを構造体の配列に変換し、結果の配列のVoltageフィールドにアクセスする必要があります。

tmp = [processingStation.FeedstockMotor]; 
result = [tmp.Voltage]; 

私は私が実際にあなたが、その後、以下の最初の答えのよう

values = rgetfield(processingStation, 'FeedstockMotor.Voltage'); 
+0

私はそのような一時変数を使用する必要はあまりありませんが、世界の終わりではないと思います。すべてのモーターのグループを取得するために、 'FeedstockMotors = [processingStation.FeedstockMotor];'のようなものを使用できます私は気にして、サブフィールドのグループにアクセスします。再び、それはまだ一時変数ですが、それは私が望むものを達成するための最も明白で最も読みやすい方法のように見えます。そして、それはたくさんカウントされます。 – Chuck

+0

@Chuckこの場合、一時変数には大きな害はありません。つまり、私はサブ構造に頻繁にアクセスするために使用する関数を追加したばかりです。 – Suever

関連する問題