2017-02-15 2 views
1

내가 먼저 질문에 다음 몇 가지 지원 정보를 이동할 수 있습니다 :Matlab의 하위 구조에 대한 액세스를 벡터화하려면 어떻게해야합니까?

가정하자 나는 다음과 같습니다

[motor.Voltage] 

이되지 않습니다

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

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

다음은 모든 모터 전압을 제공합니다 모든 모터 전압을 제공하십시오 :

[processingStation.FeedstockMotor.Voltage] 

첫 번째 출력 인 [motor.Voltage]은 구조의 모든 모터 전압을 보여줍니다. 다른 케이스에서 동일한 기능을 사용하려면 어떻게해야합니까? Voltage의 값은 FeedstockMotor이고 모두 processingStation입니다.

은 내가 현장 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)는 'squeeze (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