2009-11-16 5 views
3

파이썬 코드를 Matlab로 번역하고 파이썬 튜플을 Matlab으로 변환하는 가장 좋은 방법은 무엇인지 알아 내려고합니다.python tuple unpacking을 Matlab에 번역하는 방법?

이 예제의 목적 상, Body은 생성자가 입력으로 두 개의 기능을 취하는 클래스입니다.

다음과 같은 파이썬 코드 한 I :

X1 = lambda t: cos(t) 
Y1 = lambda t: sin(t) 

X2 = lambda t: cos(t) + 1 
Y2 = lambda t: sin(t) + 1 

coords = ((X1,Y1), (X2,Y2)) 
bodies = [Body(X,Y) for X,Y in coords] 

classdef Body < handle 

    properties 
     X,Y 
    end 

    methods 
     function self = Body(X,Y) 
      self.X = X; 
      self.Y = Y; 
     end 
    end 

end 

입니다 다음 MATLAB 코드

X1 = @(t) cos(t) 
Y1 = @(t) sin(t) 

X2 = @(t) cos(t) + 1 
Y2 = @(t) sin(t) + 1 

coords = {{X1,Y1}, {X2,Y2}} 
bodies = {} 
for coord = coords, 
    [X,Y] = deal(coord{1}{:}); 
    bodies{end+1} = Body(X,Y); 
end 

에 번역이 더 나은 더 우아 MATLAB에서 파이썬 코드의 마지막 줄을 표현하는 방법은?

bodies = cellfun(@(tuple)Body(tuple{1},tuple{2}), coords, 'UniformOutput',false); 

그리고 단지 테스트

, 나는 그것을 시도 : 출력이 셀 어레이에 캡슐화 할 경우,

bodies = cellfun(@(tuple)Body(tuple{1},tuple{2}), coords); 

나 : Body이 무엇인지 모른 채

+0

그래서 풀기 또는 클래스 초기화에 대한 질문입니까? – Maleev

답변

2

이 내 솔루션입니다 다음과 같습니다 :

X1 = @(t) cos(t); 
Y1 = @(t) sin(t); 
X2 = @(t) cos(t) + 1; 
Y2 = @(t) sin(t) + 1; 

coords = {{X1,Y1}, {X2,Y2}}; 

%# function that returns a struct (like a constructor) 
Body = @(X,Y) struct('x',X, 'y',Y); 

%# tuples unpacking 
bodies = cellfun(@(tuple)Body(tuple{1},tuple{2}), coords); 

%# bodies is an array of structs 
bodies(1) 
bodies(2) 
+0

Body를 별도의 클래스 파일에 실제로 구현하면 (위 참조) 다음 오류가 발생합니다. ??? ==> cellfun을 사용하는 중에 오류가 발생했습니다. 본문 유형이 현재 구현되지 않았습니다. ==> 드라이버의 오류 9 본문 = cellfun (@ (튜플) 본문 (튜플 {1}, 튜플 {2}), 좌표); – dzhelil

+1

두 번째 폼을 시도해보십시오 :'UniformOutput = false' 대신에 셀 배열을 만드십시오. – Amro

+0

@Dzhelil : 당신이 만든 Body 클래스와 관련이있는 것처럼 보입니다. 제대로 작동하는지 확인 했습니까? 이것을 시험해보십시오 :'testBody = Body (X1, Y1)'. – gnovice

0

Amro's answer 당신을 위해 일할 것입니다. 이 경우

X1 = @(t) cos(t); 
Y1 = @(t) sin(t); 
X2 = @(t) cos(t) + 1; 
Y2 = @(t) sin(t) + 1; 
bodies = struct('X',{X1 X2},'Y',{Y1 Y2}); 

,의 각 요소 : 당신이 정말로 필요하거나 새로운 Body 클래스를 생성하지 않으려면 그러나 STRUCT 명령을 사용하여 구조체의 배열을 구성하는 직선 전달 방법이 배열 bodies은 클래스 객체와 반대되는 구조이지만 거의 동일한 방식으로 사용할 수 있어야합니다.

관련 문제