매트랩 3차원 행렬을 파이썬에서 표현하는 방법

조회수 914회

    # 매트랩
    f = zeros(984,17,10); # (x,y,z)
    a = squeeze(f(1,:,:));
    >> size(a) 은 (17,10)

    # 파이썬
    f = np.zeros((10, 984, 17));  #(z,x,y)
    a = np.squeze(f[:,1,:]);
    >> a.shape 은 (10,17)

매트랩 식을 파이썬으로 변환하려다 보니, 3차원 형태를 (x,y,z) -> (z,x,y)와 같이 변형하였습니다. 문제는 squeeze를 사용할 땐인데요. 매트랩에서와 같이 17,10이 나와야 합니다. reshape를 사용하면 내용물의 순서가 바뀌게 되어 결과값이 달라집니다.

이 문제를 해결할 방법은 없을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • .T 붙이면 전치를 구할 수 있습니다.

    아래 코드 참고하세요.

    • 코드
    import numpy as np
    
    f = np.zeros((10, 984, 17))
    a = np.squeeze(f[:,1,:]).T
    
    print(a.shape)
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변 감사합니다. 전치를 사용했을 때, 같은 형식을 가지나 결과값이 다른 것 같더라구요. 제가 잘못 본것인가요? 알 수 없는 사용자 2020.10.22 02:22
    • 전치 사용하는 것이 맞고요. 값이 틀리다면 입력이 잘못되었거나, 처리 과정에서 문제가 있을 것 같네요. 알 수 없는 사용자 2020.10.22 05:15
  • 아래 코드 참고하세요.

    • 매트랩 코드
    f=zeros(10,5,2);
    f(1,:,:)=[1 2; 3 4; 5 6; 7 8; 9 10];
    a=squeeze(f(1,:,:));
    
    a
    
    • 매트랩 결과

    이미지

    • 파이썬 코드
    # -*- coding: utf-8 -*-
    
    import numpy as np
    
    f = np.zeros((2, 10, 5))
    f[:,1,:]=np.array([[1, 2],[3, 4],[5, 6],[7, 8],[9, 10]]).T
    a = np.squeeze(f[:,1,:]).T
    
    print(a.shape)
    print(a)
    
    • 파이썬 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)